我正在编写一个引导加载程序,但我不确定我所做的是否正确。首先,我使用这个批处理脚本来编译我的引导加载程序:
dm\bin\dmc.exe -msdo -c -cpp bootloader.cpp
masm\bin\ml.exe -c bootloaderASM.asm
dm\bin\link.exe /BINARY bootloaderASM.obj bootloader.obj
我正在使用 DMC 的编译器和链接器,以及 masm 615 汇编器,它们都应该是 16 位(DMC 是 16 和 32)。现在在我的程序集文件 bootloaderASM.asm 中,如果我添加“org 07C00”,输出文件 bootloaderASM.sys 将填充 0 直到 07C00,然后填充预期的代码。但是,如果我删除它,输出文件为预期的。据我了解, org 指令只是调整我的指令使用的地址,以便基数为 07C00,我想它不应该用零填充我的输出文件?
编译器和汇编器中的 .obj 文件似乎没问题。它们在 0x07c00 之前不包含前导零,但链接器的最终输出是错误的。
现在是链接器的问题吗?我该如何修复它/您是否建议使用不同的(16 位)链接器?另外-如果我只是忽略引导加载程序的 org 指令可以吗?
另外 - 我已经编写了一个程序来读取我的引导加载程序并将其写入虚拟硬盘驱动器的引导扇区,我可以简单地修改它以忽略链接器输出中的前导零 - 这行得通吗?
谢谢你。