【问题标题】:Hello World Boot LoaderHello World 引导加载程序
【发布时间】:2020-02-23 19:14:32
【问题描述】:

我正在尝试为汇编中的引导加载程序打个招呼。 我正在关注本教程: http://www.osdever.net/tutorials/view/hello-world-boot-loader

我搜索了一下,似乎人们说 gcc 不适用于编译程序集。所以我搜索并找到了flat assembler。当我尝试编译该示例时,它在第一行 [BITS 16] 处给了我一个错误。基本上它说的是“非法指令”。

这段代码需要什么类型的汇编器?

【问题讨论】:

    标签: loader boot


    【解决方案1】:

    我不知道GCC中的某些工具是否可以编译汇编程序(如果可以,是否可以编译为16位代码),但是您参考的站点推荐使用NASM。你用 NASM 试过了吗?

    【讨论】:

    • 是的,我没有看到,现在我不知道如何使用它。
    • 我从未使用过 nasm。但是 man nasm 告诉我它只是根据输入(汇编程序)文件生成一个目标文件。语法似乎是“nasm -o objectfile assemblerfile.asm。包含您的第一行的文件 ([BITS 16]) 不会产生错误,因此它应该是您要查找的内容。
    • 我用你的链接中的“无引导加载程序”尝试了 nasm。有用。 “nasm nothing.asm”创建一个目标文件“nothing”。当我运行“无文件”时,我的操作系统报告“无:x86 引导扇区,代码偏移量 0x0”。我想这就是你需要的。我现在可以将它写入软盘并从中启动。 (虽然它显然什么都不做。)
    【解决方案2】:

    我只是将这条线注释掉,它在 FASM 中工作。 FASM 似乎自动默认为 16 位。编译后,它生成了一个同名的 BIN 文件。我将其重命名为 IMG 扩展名,然后使用 VirtualBox 将其分配为软盘映像进行测试。运行良好且已启动。

    只要将此 BIN/IMG 文件写入驱动器的第一个扇区,它似乎就可以正常工作。我也使用了上述网站上的教程。

    【讨论】:

      【解决方案3】:

      尝试删除 BITS 16 周围的方括号,以防万一。

      【讨论】:

      • edit 改写成更自信的答案。也许就像“问题可能是……。在那种情况下,解决方案是……”。这种措辞避免了您在问问题而不是回答的误解(任何草率的读者)。作为奖励,请考虑提供更详细的说明,说明这如何以及为什么会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 2015-05-04
      相关资源
      最近更新 更多