我正在接近x86实模式编码,我在这里找到了一些示例代码:http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt
该文章中的第三个示例使用实模式下的BIOS调用在内存中加载一些软盘扇区,然后跳转到它们。它是一个简单的引导装载程序。它从第二个扇区加载5个扇区。在第二个扇区(在第一个扇区的512个字节之后),有一些指令用于打印出一些文本。
好吧,我编译了它并尝试了二进制文件,但文本没有打印出来。你能重现这种功能障碍并告诉我如何解决它吗?
我感谢你的帮助,我为我的问题的平庸而道歉。 (但我无法弄清楚出了什么问题)。
答案 0 :(得分:3)
如果您使用qemu,则需要将图像填充为扇区大小的整数倍。
在image.asm:
的末尾添加times 512*2-($-$$) db 0
组装并运行:
nasm -f bin -o image.bin image.asm
qemu-system-i386 -fda image.bin
使用另一个模拟器,您可能必须填充到(1 + 5)* 512的总长度,甚至是软盘的全长(1474560字节)。
答案 1 :(得分:0)
我可以立即判断的一点是,该代码无法确保堆栈不在1000h:0000
附近。