1
回答
不是说在进入保护模式后不会用Bois中断 为什么linux0.11中在刚要进入模式时却重设BIOS中断
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

linux0.11中setup.S


都要进入保护模式了 也就是BIOS中断马上不要用了  为什么还要重设中断


mov    al,#0x11        ! initialization sequence 表示中断请求边沿触发,多片级联并且租后需要发送ICW4

    out    #0x20,al        ! send it to 8259A-1
    .word    0x00eb,0x00eb        ! jmp $+2, jmp $+2    延时操作
    out    #0xA0,al        ! and to 8259A-2
    .word    0x00eb,0x00eb
    mov    al,#0x20        ! start of hardware int's (0x20)
    out    #0x21,al
    .word    0x00eb,0x00eb
    mov    al,#0x28        ! start of hardware int's 2 (0x28)
    out    #0xA1,al
    .word    0x00eb,0x00eb
    mov    al,#0x04        ! 8259-1 is master
    out    #0x21,al
    .word    0x00eb,0x00eb
    mov    al,#0x02        ! 8259-2 is slave
    out    #0xA1,al
    .word    0x00eb,0x00eb
    mov    al,#0x01        ! 8086 mode for both
    out    #0x21,al
    .word    0x00eb,0x00eb
    out    #0xA1,al
    .word    0x00eb,0x00eb
    mov    al,#0xFF        ! mask off all interrupts for now
    out    #0x21,al
    .word    0x00eb,0x00eb
    out    #0xA1,al

! well, that certainly wasn't fun :-(. Hopefully it works, and we don't
! need no steenking BIOS anyway (except for the initial loading :-).
! The BIOS-routine wants lots of unnecessary data, and it's less
! "interesting" anyway. This is how REAL programmers do it.
!
! Well, now's the time to actually move into protected mode. To make
! things as simple as possible, we do no register set-up or anything,
! we let the gnu-compiled 32-bit programs do that. We just jump to
! absolute address 0x00000, in 32-bit protected mode.

    mov    ax,#0x0001    ! protected mode (PE) bit
////////////////////////////////////////////已经进入保护模式//////////////////////////////////
    lmsw    ax        ! This is it!    (建议使用 mov ax,cr0为了兼容以前的80286才使用lmsw)
    ;注意此处的cs=0x8已为保护模式下的段选择子
    ;这里使用的是GDT中的第二个段描述符
    jmpi    0,8        ! jmp offset 0 of segment 8 (cs) 刷新当前的cpu列队
//////////////////////////////////////////////setup.S完///////////////////////////////////////
<无标签>
举报
共有1个答案 最后回答: 3年前
因为linux设置的中断是使用PIC即8259A芯片设置的中断,这里返回0xcd 0x?? 0xcd是int 0x??是类似于13h的数字。而bois是存储于计算机的ROM里的,他在启动后取到内存里运行。两者不同。当然读io可以用IO端口号,in 42h,20h.或者out。你可以查一查的。参考《linux内核源码剖析》前4章,《30天自制操作系统》第六天的内容。
顶部