跟大师学习系统编程---操作系统加载(8)

来源:互联网 发布:javashop最新源码下载 编辑:程序博客网 时间:2024/06/06 00:22

移动主程序从地址开始执行

当前根据BIOS中断读取系统硬件参数的职责已经完成,可以覆盖中断向量表以及对应的一些中断处理程序了。所以现在先屏蔽所有中断,并将system(除bootsect.s, setup.s以外操作系统映像的其余部分)
从0x10000~0x90000移动到0x00000~0x80000位置

虽然只需要移动0x10000~0x40000部分,多移动一些也没有关系。
这样可以应对未来一段时间kernel image的增长。

为何要移动到0地址开始的地方

代码如下

! now we want to move to protected mode ...    cli         ! no interrupts allowed !! first we move the system to it's rightful place    mov ax,#0x0000    cld         ! 'direction'=0, movs moves forwarddo_move:    mov es,ax       ! destination segment    add ax,#0x1000    cmp ax,#0x9000    jz  end_move    mov ds,ax       ! source segment    sub di,di    sub si,si    mov     cx,#0x8000    rep    movsw    jmp do_move! then we load the segment descriptorsend_move:
阅读全文
0 0