代码之家  ›  专栏  ›  技术社区  ›  Xinus

0000:7c00处的内存对引导序列的意义是什么?

  •  12
  • Xinus  · 技术社区  · 15 年前

    为什么在C00000的bios分区上读取7:0?那个地址有什么特别之处?“:”在引用地址时做了什么?

    4 回复  |  直到 15 年前
        1
  •  13
  •   Seth    5 年前

    “:”是分段内存时代的遗留问题,当时PC以实模式运行,一次只能运行64K。“:”左边的数字是您的区段,右边的数字是您的地址。

    如果您想自己在内存中漫游,windows调试命令接受此符号:

    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而选择的地址,请参阅: https://web.archive.org/web/20140701052540/http://www.ata-atapi.com/hiwmbr.html

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

        2
  •  23
  •   Mark Rotteveel    5 年前

    令人高兴的答案是 org 7C00h 已经成为引导扇区引导加载程序编程的同义词。

        3
  •  3
  •   Community CDub    5 年前

    阅读本文:

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

    引用上面的话:

    适用于由PC BIOS启动的引导加载程序:

    • 一个扇区是最后一个512字节 其中两个字节必须为0xAA55(即0x55后跟0xAA),或 否则BIOS会将驱动器视为不可旋转。
    • 订单,所述第一扇区将放置在RAM地址0000:7C00,以及 BIOS的角色已结束,因为它将控制权转移到0000:7C00(即它 JMPs(发送至该地址)

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

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

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

    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代码(这意味着您无法轻松地对其重新编程,因此不属于引导加载程序的责任)。

        4
  •  3
  •   jlettvin    4 年前

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