Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly PC引导:dl寄存器和驱动器号_Assembly_X86_Bootloader_X86 16_Bios - Fatal编程技术网

Assembly PC引导:dl寄存器和驱动器号

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

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

当%dl设置了位0x80和0x70时,读取GRUB的源代码时,它会用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在将控制权交给引导加载程序之前所做的事情,以及用于与之通信的标准代码(如“驱动器编号”)。我希望编写自己的引导加载程序,但我发现的一切都有点含糊不清,不够专业,无法在引导加载程序开始运行时通知计算机的确切状态。

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。