使用 nasm 和 qemu 运行引导加载程序的问题

Posted

技术标签:

【中文标题】使用 nasm 和 qemu 运行引导加载程序的问题【英文标题】:problem running a bootloader using nasm and qemu 【发布时间】:2021-03-30 01:20:59 【问题描述】:

我有一个汇编语言代码,我在其中切换到保护模式,然后在屏幕上打印“Hello World”。我已将此代码保存在名为 boot2.asm 的文件中。我需要帮助来运行和测试代码,因为我无法通过原始编码器自己给出的命令来做到这一点。

我使用的命令是:

nasm -f bin boot2.asm && qemu-system-x86_64 -fda boot.bin

我应该在 cmd 中运行这个命令,对吧?我的电脑上也安装了 NASM 和 QEMU。

【问题讨论】:

nasm 将生成一个名为 boot2.bin 的输出文件,但您似乎启动了一个名为 boot.bin 的文件。你确定这是正确的吗? 我尝试创建 boot2.bin 位它说,“qemu-system-x86_64: -fda boot2.bin: 无法打开 'boot2.bin': 系统找不到指定的文件。”在切换到文件所在的桌面文件夹后,我正在使用 cmd 运行这个 btw 它确实创建了一个名为 boot2 的文件,没有 .bin 扩展名,然后我手动添加了扩展名并执行了 qemu 命令,工作正常,除了它应该打印出两件事而不是一个,我正在将代码添加到问题本身,看看您是否可以提供帮助 NASM 需要-o boot2.bin,否则它会输出到boot2(没有.bin)。 @xxxxxxxxxxxxxx 每个问题只问一个问题。你原来的问题已经解决了。考虑为您的新问题提出一个新问题。此外,如果您希望人们帮助您编写代码,请解释代码应该做什么并评论它!没有 cmets,很难理解你的逻辑。 【参考方案1】:

如果您想从文件boot2.asm 创建一个名为boot.bin 的文件,则需要通过-o boot.bin 选项指示nasm 这样做。否则,nasm 只会生成一个名为 boot2 的文件,这不是您想要的。所以固定的命令行是

nasm -f bin -o boot.bin boot2.asm && qemu-system-x86_64 -fda boot.bin

有关详细信息,请参阅nasm manual。

【讨论】:

以上是关于使用 nasm 和 qemu 运行引导加载程序的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 qemu 模拟器中构建和运行 .img 文件?

为啥我的引导加载程序无法在最近的笔记本电脑上运行?

从我的16位引导加载程序加载内核

如何从汇编例程中调用 C 函数并使用 nasm 和 gcc 链接 C 和汇编文件

QEMU 在引导时挂起

如何将控制从我的引导加载程序转移到位于硬盘驱动器中的应用程序