【问题标题】:What Assembly Instructions Live In the Master Boot Record?主引导记录中有哪些组装说明?
【发布时间】:2010-01-26 19:41:30
【问题描述】:

很好奇 X86 架构上的主引导记录实际上是由哪些显式汇编指令构成的。感谢您提供任何见解。

欢迎使用其他架构,但这主要针对 X86。

【问题讨论】:

    标签: x86 mbr


    【解决方案1】:

    主引导记录由 512 个字节组成,最后两个字节必须为 0x55 0xAA。剩下510个字节,分区表项是16个字节,最多4个分区表项,也就是64个字节。 Here 是分区条目的样子。

    剩下的是 446 字节的汇编代码。通常前几个字节由引导标识符记录组成,描述引导加载程序的磁盘数据,例如标识符、系统 ID 等等,然后 BIOS 期望引导代码位于 0x000:0x07C00,然后将自身重新定位到更低的位置在内存段中。有关引导加载程序的示例教程,请参阅 here。 WikiBooks 上有关于它的详细技术概述here

    您唯一需要注意的是,引导加载程序代码不得超过 446 字节,否则分区表会出错,因此 BIOS 错误消息“错误。缺少操作系统'或类似的!

    将引导扇区编译后的二进制文件写入磁盘通常会涉及一种混乱而危险的搞砸计算机的方式,在 Linux 下该命令类似于:

    # 假设 /dev/hda1 是第一个硬盘,那么... dd if=mybootldr.bin of=/dev/hda1 bs=512 cnt=1

    另一种方法是使用低级磁盘编辑程序,甚至使用普通的旧 DEBUG.EXE(在旧的 MSDOS 软盘上找到),甚至使用FreeDos

    C:\DEBUG.EXE mybootldr.bin -W 100 0 0 1 -Q

    如果我记得,DR.DOS(数字研究 DOS)是 MS-DOS 的竞争对手,在 DR-DOS 启动之前,它在引导加载程序代码上使用了密码保护。

    编辑:如果您真的很好奇 BIOS 如何查找 0x0000:0x7C00,请查看此链接,您可以在其中下载原始 IBM XT 的 BIOS 代码here

    希望这会有所帮助, 最好的祝福, 汤姆。

    【讨论】:

    • @Stacker:你是什么意思......我赞成你的回答;)如果这就是你的意思...... :)
    • 这是一篇精彩的文章。谢谢汤米布75! :)
    【解决方案2】:

    在这里查看从 grub1 中的 stage1 剖析的 MBR-bootloader:http://thestarman.pcministry.com/asm/mbr/GRUB.htm

    【讨论】:

      【解决方案3】:

      喜欢这些老派的话题 ;-)

      这里有两个汇编器listings,因为你要求explicit assembly instructions

      【讨论】:

      • 那些老派话题永远不会无聊! ;)
      【解决方案4】:

      这是一个用汇编语言编写的playable Tetris game,它适合 x86 引导扇区。我看到了一个变种,它只有在你能完成十行的情况下才会启动你的常规操作系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多