【问题标题】:Call another assembly file from bootloader从引导加载程序调用另一个程序集文件
【发布时间】:2023-12-25 05:11:01
【问题描述】:

我无法解决这个问题。

我使用本教程作为参考,使用 NASM for X86 开发了一个引导加载程序: http://fisnikhasani.com/building-your-own-bootloader/

使用命令:

nasm -f bin boot.asm -o boot.bin

我能够在 USB 密钥上运行名为 boot.bin 的引导加载程序。

不过,我还使用名为 pacman.asm 的 x86 程序集开发了一款 Pacman 游戏。我希望能够启动到引导加载程序并玩 pacman 游戏。

但是,一旦我的 USB 密钥与 boot.bin 文件连接并启动,我不知道如何运行 pacman.asm 文件。

感谢任何帮助。

【问题讨论】:

  • 这款 pacman 游戏是依赖 DOS 中断,还是设计为在具有 BIOS 调用和直接硬件访问的引导加载程序环境中工作?
  • 通常你会组装 pacman.asm 并将它作为二进制文件存储在磁盘(或磁盘映像)的一个扇区中。您的引导加载程序将从放置游戏的磁盘中读取 sctor 并将其加载到内存中。然后引导加载程序会跳转到那个 pacman 代码。
  • 肯定有一些关于引导多扇区二进制文件的现有 SO 问题。我快速浏览了一下,但我没有找到一个好的重复目标,所以只是投票关闭它,因为它太宽泛了(因为这是一个众所周知的问题,已经解决了很多次,例如使用 syslinux 之类的引导加载程序)
  • 这个答案可能会给你一些想法。它是一个 2 阶段引导加载程序,但您可以将 stage2.asm 替换为 pacman.asm 并确保在顶部使用 org 0x0000。如果您的 pacman.bin(stage2.bin) 大于一个扇区 (512) 字节,您可能需要进行的唯一更改,您将必须在引导加载程序 mov al,0x1 ;Reading one sector 的这一行中增加值 1。 *.com/a/34095896/3857942
  • @MichaelPetch 谢谢,你给我的那个例子效果很好。对于一般性问题,抱歉,我已经搜索了几个小时,但无法让引导加载程序调用游戏。

标签: assembly x86 nasm bootloader


【解决方案1】:

如果您使用 Windows,那么这对我有用:

在命令行中输入:

copy /b bootldr.bin + pacman.bin myGame.img

这将复制 bootloader.bin,然后将 pacman.bin 放在 bootloader 的末尾,并将最终结果存储在 MyGame.img 中

您不必使用 .img 或 .bin

然后将 pacman 游戏加载到内存中并进行远跳
现在你可以玩你的游戏了:)

【讨论】:

    最近更新 更多