Skip to content

05 重要代码放在零地址处

你好,我是闪客。

上一讲我们说到,操作系统已经完成了各种从硬盘到内存的加载,以及内存到内存的复制(你可以通过后面这张图来回忆)。

在这一讲中,操作系统将会对内存布局做最后一次大调整,让我们一起看看它是怎么折腾的吧!

图片

处处都是 BIOS 的调包侠

好,我们向下一个文件 setup.s 进发!现在程序跳转到了 0x90200 这个位置开始执行,这个位置处的代码就位于 setup.s的开头,代码如下:

start:
    mov ax,#0x9000  ; this is done in bootsect already, but...
    mov ds,ax
    mov ah,#0x03    ; read cursor pos
    xor bh,bh
    int 0x10        ; save it in known place, con_init fetches
    mov [0],dx      ; it from 0x90000.

这里又有个 int 指令。

前面的课程如果你有好好看过的话,一下就能猜出它要干嘛。还记不记得之前有个 int 0x13 表示触发 BIOS 提供的读磁盘中断程序?

这个 int 0x10 也是一样的,它也是触发 BIOS 提供的中断服务,具体来说是调用显示服务相关的中断处理程序,而 ah 寄存器被赋值为 0x03 表示显示服务里具体的读取光标位置功能这一个子服务。