8

我在互联网上的某个地方读到,在跳转到 0x7c00 之前,BIOS 将启动设备的“驱动器号”加载到 %dl 中。但是这个“驱动器号”是什么?连接到计算机的每个设备都由 BIOS 分配一个编号?如果是这样,我怎么知道给定设备分配给哪个号码?

阅读 GRUB 的源代码,我发现当 %dl 设置了位 0x80 和 0x70 时,它会用 0x80 覆盖整个寄存器。这是为什么?这是代码:

jmp 3f      /* grub-setup may overwrite this jump */
testb $0x80, %dl
jz 2f
3:
/* Ignore %dl different from 0-0x0f and 0x80-0x8f.  */
testb $0x70, %dl
jz 1f
2:     
movb $0x80, %dl
1:

顺便一提。网上有没有关于电脑启动过程的详细资源?特别是关于 BIOS 在将控制权交给引导加载程序之前所做的事情以及用于与之通信的标准代码(如“驱动器编号”)。我希望编写自己的引导加载程序,但我发现的一切都太模糊了,技术上还不足以在我的引导加载程序开始运行时通知计算机的确切状态。

4

1 回答 1

3

BIOS int 13h 函数接受驱动器号。它应该是 BIOS 中的那种驱动器号DL,因为它本身使用 int 13h 来加载引导扇区。

于 2012-06-24T03:11:58.413 回答