5

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

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

4

4 回答 4

14

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

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

您唯一需要注意的是,引导加载程序代码不得超过 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 代码。

希望这会有所帮助,最好的问候,汤姆。

于 2010-01-26T20:21:24.340 回答
4

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

于 2010-01-26T19:53:12.033 回答
3

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

这是两个汇编程序列表,因为您要求explicit assembly instructions

于 2010-01-26T20:31:14.993 回答
2

这是一个用汇编编写的可玩的俄罗斯方块游戏,它适合 x86 引导扇区。我看到了一个变体,它只有在你能完成十行的情况下才会启动你的常规操作系统。

于 2010-01-26T20:59:48.157 回答