对于在X86架构上实际构成主引导记录的显式汇编指令感到好奇。感谢您的任何见解。
欢迎使用其他架构,但这主要适用于X86。
答案 0 :(得分:13)
主引导记录由512个字节组成,最后两个字节必须为0x55 0xAA。剩下510个字节,分区表条目是16个字节,最多4个分区表项,即64个字节。 Here是分区条目的样子。
剩下的是446字节的汇编代码。通常前几个字节由一个引导标识符记录组成,描述引导加载程序的磁盘数据,例如标识符,系统ID,仅举几例,然后BIOS要求引导代码为0x000:0x07C00,然后它将自己重新定位在内存部分。有关引导加载程序的示例教程,请参阅here。关于它的维基书籍有一个详细的技术概述here。
唯一需要注意的是,引导加载程序代码不得超过446字节,否则分区表会被搞砸,因此BIOS错误消息'错误。缺少操作系统'或类似的!
将引导扇区编译的二进制文件写入磁盘将涉及一种混乱且危险的方式来拧紧计算机通常,在Linux下命令类似于:
# Assume that /dev/hda1 is the first hard disk then... 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(Digital Research DOS)是MS-DOS的竞争对手,在DR-DOS启动之前对引导加载程序代码使用了密码保护。
编辑:如果您真的很好奇,关于BIOS如何查找0x0000:0x7C00,请查看此链接,您可以在其中下载原始IBM XT的BIOS代码{{3} }。
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:4)
在这里查看grub 1中第1阶段的解剖MBR-bootloader:http://thestarman.pcministry.com/asm/mbr/GRUB.htm
答案 2 :(得分:3)
喜欢这些旧学校话题; - )
这里有两个汇编程序listings,因为您要求explicit assembly instructions
答案 3 :(得分:2)
这是一个用汇编编写的playable Tetris game,它适用于x86引导扇区。我看到了一个这样的变种,只有你可以完成10行才能启动常规操作系统。