Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/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
Operating system 为什么BIOS INT 0x19将引导加载程序加载为;0x7C00";?_Operating System_Bootloader - Fatal编程技术网

Operating system 为什么BIOS INT 0x19将引导加载程序加载为;0x7C00";?

Operating system 为什么BIOS INT 0x19将引导加载程序加载为;0x7C00";?,operating-system,bootloader,Operating System,Bootloader,正如我们所知,BIOS中断(INT)0x19用于搜索引导签名(0xAA55)。如果找到引导加载程序,则在0x7C00处加载并执行引导加载程序 我的问题:为什么是0x7C00?原因是什么?如何通过一些方法来评估它?这可能已经死了,但我会回答 在任何引导加载程序开始时,当您将段的原点设置为0x7c00时,寄存器也会跳转到该地址。因此,理想情况下,如果您查看一些告诉您如何使用int0x19命令的在线资源,它们将指导您如何跳转到另一个地址 要解决此问题,您最好在每次跳转到新地址时将堆栈重置为0。可能是因

正如我们所知,BIOS中断(INT)0x19用于搜索引导签名(0xAA55)。如果找到引导加载程序,则在0x7C00处加载并执行引导加载程序


我的问题:为什么是0x7C00?原因是什么?如何通过一些方法来评估它?

这可能已经死了,但我会回答

在任何引导加载程序开始时,当您将段的原点设置为
0x7c00
时,寄存器也会跳转到该地址。因此,理想情况下,如果您查看一些告诉您如何使用int
0x19
命令的在线资源,它们将指导您如何跳转到另一个地址


要解决此问题,您最好在每次跳转到新地址时将堆栈重置为0。

可能是因为MBR(由BIOS)加载到内存中的0x7c00地址,然后int 0x19在扇区0x7c00上搜索MBR扇区签名0xAA55

关于0xAA55:

不是校验和,而是签名。它确实提供了一些简单的方法 存在某些MBR的证据

0xAA55也是一种交替位模式:1010101001010101

它经常被用来帮助确定你是在一个小端点上还是在一个小端点上 big-endian系统,因为它将读作AA55或55AA。我 怀疑这是将其置于MBR末端的部分原因

关于0x7c00:


查看此网站(这可能有助于您找到答案):

我认为这里没有人编写BIOS,因此我们无法告诉您。你有什么特别的问题吗?在谷歌上大约1分钟就会产生这样一个格式不好、语法不好(但看起来有些有希望)的结果: