assembly - i386 实模式 - 从软盘加载

标签 assembly x86 nasm real-mode floppy

我正在接近 x86 实模式编码,并且我在这里找到了一些示例代码:http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt

该文章中的第三个示例使用实模式下的 BIOS 调用将软盘的几个扇区加载到内存中,然后跳转到它们。这是一个简单的引导加载程序。它从第二个扇区加载 5 个扇区。在第二个扇区(第一个扇区的 512 字节之后),有一些用于打印一些文本的指令。

嗯,我编译了它并尝试了二进制文件,但文本没有打印出来。你能重现这个功能障碍并告诉我如何解决它吗?

感谢您的帮助,并对我的问题的平庸表示歉意。 (但我不知道哪里出了问题)。

最佳答案

如果您使用 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 字节)。

关于assembly - i386 实模式 - 从软盘加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687318/

相关文章:

assembly - nasm 指令和宏的缩进

linux - 使用 Assembly 在屏幕上打印字符

linux - 在气体中检索命令行参数

c++ - 在 qt whit C++ 代码中不显示汇编代码

c++ - 程序运行周期中代码块Ver.16.01崩溃

c - 使用 SSE 模拟标准 Math.pow 函数

assembly - 在GDB(实模式,依附于QEMU)中,在特定条件下的特定点stepo和nexti似乎打破了断点机制

c++ - 我对缓存性能的推理是否正确?

assembly - 我如何编写一个在 NASM 16 位实模式下打印空终止字符串的函数?

assembly - 将 .data 部分中定义的整数移至寄存器