如何使用超过512字节的自己的可启动软盘

时间:2014-02-18 06:54:11

标签: assembly bootable floppy

我正在学习汇编语言,我遵循http://mikeos.berlios.de/write-your-own-os.html步骤,制作可启动的图形游戏,但我遇到了一个问题:我的程序不能使用超过512字节的内存。

我该如何解决这个问题?

我感谢任何帮助。

这是我的代码(仍然小于512字节):http://pastebin.com/i6ehx8dT

编辑:我解决了我的问题,这是用汇编语言16位制作的软盘bootloader的最小示例:http://pastebin.com/x1SawyjN

最后,这个链接非常有用:http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt

1 个答案:

答案 0 :(得分:2)

这不容易做到:

实际上,BIOS只将磁盘的前512个字节加载到内存中。

您需要做的是将其余数据加载到内存中。这通常使用中断13h(子功能AH = 2或AH = 42h)来完成。

如果你确切知道磁盘上数据的位置,这很容易。出于这个原因,像GRUB这样的启动加载器使用众所周知的位置 - 不幸的是,这些位置有时会被其他程序覆盖,例如复制保护驱动程序。

如果你需要从定义良好的文件系统(例如FAT或NTFS)加载,这更棘手:你只有大约450个字节的空间(因为文件系统内部使用了512个字节中的~60个)对于解释文件系统数据的代码,找到包含代码的文件并将其加载到内存中!