Assembly PC引导:dl寄存器和驱动器号
我在互联网上的某个地方读到,在跳到0x7c00之前,BIOS会将引导设备的“驱动器号”加载到%dl中。但这个“驱动器号”是什么?BIOS为连接到计算机的每个设备分配了一个编号?如果是,我如何知道指定设备分配给哪个号码 当%dl设置了位0x80和0x70时,读取GRUB的源代码时,它会用0x80覆盖整个寄存器。为什么呢?代码如下:Assembly PC引导:dl寄存器和驱动器号,assembly,x86,bootloader,x86-16,bios,Assembly,X86,Bootloader,X86 16,Bios,我在互联网上的某个地方读到,在跳到0x7c00之前,BIOS会将引导设备的“驱动器号”加载到%dl中。但这个“驱动器号”是什么?BIOS为连接到计算机的每个设备分配了一个编号?如果是,我如何知道指定设备分配给哪个号码 当%dl设置了位0x80和0x70时,读取GRUB的源代码时,它会用0x80覆盖整个寄存器。为什么呢?代码如下: jmp 3f /* grub-setup may overwrite this jump */ testb $0x80, %dl jz 2f 3: /* Ig
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在将控制权交给引导加载程序之前所做的事情,以及用于与之通信的标准代码(如“驱动器编号”)。我希望编写自己的引导加载程序,但我发现的一切都有点含糊不清,不够专业,无法在引导加载程序开始运行时通知计算机的确切状态。BIOS int 13h函数接受驱动器号。它应该是
DL
中的那种驱动器号,BIOS理解它,因为它本身使用int 13h加载引导扇区。Ok。我知道bios理解它,但我也想理解。:)我想知道的是这些代码是如何分配的。比如,如果它们是静态的(0代表一个给定的设备,1代表另一个…等等),如果是,我在哪里可以得到这个列表;如果不是,bios如何分配它们。好的,0x80是引导硬盘驱动器的唯一有效驱动器号,类似于引导软盘驱动器的0x00。代码中有这样一条注释:这是一个解决问题的方法,用于解决没有正确通过引导驱动器的bug bios。如果GRUB安装在HDD中,请检查DL是否正确屏蔽。如果没有,则假定BIOS传递了一个伪值,并将DL设置为0x80,因为这是唯一可能的引导驱动器。如果将GRUB安装到软盘中,则不会执行任何操作(只是跳转)。
传统上就是这样。非启动驱动器的数量更高。我明白了。闪存和cd-rom驱动器的编号是否相同(0x80)?如果从那里启动,则应为0x80。