试图从第2扇区加载mbr

时间:2014-04-05 12:19:21

标签: windows assembly operating-system

我想制作一个在mbr之前运行的代码,所以我将mbr移动到第二个扇区,我的代码移到扇区零。在扇区1中,我加载了第二个扇区(包含mbr),而不是我调用地址7c00来开始mbr代码。

所以硬盘看起来像这样: 扇区0:我的程序执行IO ans加载扇区1 扇区1:加载扇区2的代码 第2部门代码

当我启动时,我收到此消息: “无法打开驱动器多0磁盘0 rdisk 0分区1”

重要的是说我希望windows xp在我的代码之后运行

1 个答案:

答案 0 :(得分:1)

您所描述的正是MBR代码的工作方式:

硬盘的MBR位于硬盘的第一个扇区。 BIOS将加载该扇区。

MBR扇区将自己移动到其他地址并加载可引导硬盘分区的第一个扇区以寻址7C00(十六进制)。然后它将跳转到7C00(十六进制)。

然而:

MBR还包含有关最后80个字节中的硬盘分区的信息。如果要用自己的引导扇区替换MBR,则必须复制最后80个字节中的数据。否则,硬盘访问将无法继续工作,因为操作系统将在硬盘第一个扇区的最后80个字节中查找硬盘信息。

如果要替换可引导分区的引导扇区,则会出现类似问题。根据所使用的文件系统,存储在引导扇区的某些字节中的文件系统信息。对于FAT或NTFS,前三个字节必须是" JMP"指令和以下约65个字节包含文件系统信息。