0000:7c00的内存对引导顺序有什么意义?

时间:2010-01-13 17:10:44

标签: bios bootloader

为什么bios读取分区的启动记录0000:7c00?那个地址有什么特别之处? ':'在引用地址时做了什么?

5 个答案:

答案 0 :(得分:18)

简单的答案是7C00h是从最初的32k安装内存的底部开始的1k(引导扇区为512字节,另外还有512字节用于可能的引导扇区)。

  

快乐的答案是org 7C00h已经成为引导扇区 - 引导加载程序编程的同义词。

答案 1 :(得分:11)

“PC”是分段内存天数的延续,当PC以实模式运行时,一次只能执行64K。 “:”左侧的数字是您的细分,右侧的数字是您的地址。

如果你想自己在内存中搜索,那么windows debug命令会接受这种表示法:

C:\Users\Seth> debug
-d0000:7c00
0000:7C00  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C10  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C20  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C30  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C40  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C50  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C60  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C70  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

关于这个特定地址,它只是一个被选中加载MBR的地址,请参阅:http://www.ata-atapi.com/hiwmbr.html

  

“如果找到MBR,它将被读入内存0000:7c00并且INT 19跳转到内存位置0000:7c00”

答案 2 :(得分:2)

阅读这篇文章:

http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

从上面的URL,BIOS(实际上是PC硬件)将跳转到0000:7c00的内存,继续以16位模式执行。

从上面引用:

  

引导加载程序在某些条件下运行,程序员必须了解这些条件才能成功引导加载程序。下列   适用于PC BIOS启动的引导加载程序:

     
      
  • 第一部门   驱动器包含其引导加载程序。
  •   
  • 一个扇区是512字节 - 最后一个   其中两个字节必须是0xAA55(即0x55后跟0xAA),或者   否则BIOS会将驱动器视为无法启动。
  •   
  • 如果一切都在   命令,表示第一个扇区将被放置在RAM地址0000:7C00,和   BIOS将控制权转移到0000:7C00时,其作用已结束。 (即它   JMP到那个地址)
  •   

所以从启动开始,如果你想让CPU开始执行你的代码,它必须位于内存0000:7c00。而这部分代码是从硬盘的第一个扇区加载的 - 也是由硬件完成的。并且它只是第一个被加载的扇区,然后代码的其余部分必须由这个初始的“引导程序”加载。

有关硬盘第一扇区和7c00设计的更多信息:

http://www.ata-atapi.com/hiwdos.html

http://www.ata-atapi.com/hiwmbr.html

请不要与CPU的启动模式混淆 - 它将获取和执行的第一条指令位于物理地址0xfffffff0(参见第9-5页):

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

并且在此阶段它正在执行非易失性(意味着您无法轻松地重新编程,因此不是引导加载程序的责任)BIOS代码。

答案 3 :(得分:1)

为什么选择7C00?对于初始/原始IBM PC BIOS,最好由BIOS程序员/硬件设计人员来回答。

如果您能找到 IBM个人计算机技术参考手册的副本,则可能包含一些线索。

答案 4 :(得分:0)

在最初的IBM PC中,超过32K的RAM被认为是不可想象的。用分段寻址术语来说,这是0000:8000,其中8000 hex是十进制32768。时间的方式是BIOS POST的结束,方法是将软盘的Boot Sector加载到A:或将硬盘驱动器的Master Boot Record加载到C:,位于内存顶部下方512字节的位置,这意味着要从中减去0200十六进制8000十六进制获得7C00。因此,引导序列将第一个有效的512字节的第一个扇区加载到其中,然后将指令指针设置为0000:7C00来执行它。我曾经为这些第一个扇区编写代码以加载操作系统。