【问题标题】:Test native x86 programs, building bootable images/drives测试原生 x86 程序,构建可启动映像/驱动器
【发布时间】:2012-03-08 09:22:45
【问题描述】:

我有下一个问题:我正在使用 NASM 并构建一些本机并以这种方式编译它:

nasm -f bin source -o out

我正在为 x86 获取本机程序。

现在最有趣的是,我怎样才能让它可启动然后测试它?

我认为有 3 种方法可以启动(但对我来说,它们都失败了 :()

  • 使用 mkbt 实用程序(或其他类似的软件)将其写入软盘
  • 构建 ISO 映像,并在其中编辑可引导扇区
  • 手动将内存扇区写入 USB/SD 卡或其他驱动程序

至于测试,每次重启电脑都很糟糕,所以最好使用一些虚拟操作系统软件,如Vbox,VMWare等。

所以我为此使用了 VBox。 为了构建 ISO - 我使用了 CDBurnerXP。

使用 cdburner,我为我的本地程序选择了可引导扇区,然后在 Vbox 中选择新的 ISO 作为我的程序启动的磁盘。

结果总是空屏,没有错误显示,什么都没有……

我认为,我有很多错误......

使用 mkbt,我无法将其写入 USB 驱动程序....我现在没有软盘,所以我无法将图像写入软盘,mkbt 无法写入 USB...: (

我做错了什么?

我该如何解决我的问题?

【问题讨论】:

  • 我们缺少重要信息。代码是什么样的。发布最小 SSCCE? (解决了floopiness :))
  • @sehe 重要吗,它喜欢什么?它取自 x86 汇编手册中的示例,那又如何?
  • @user1131997:如果它有错误并且您无法自己找到它们,这有关系吗?或者,如果您不正确地使用它制作可启动图像/媒体? :) 帮助我们帮助您。
  • @alex 打印 hello world 的简单程序如何帮助您?我如何制作我在主题中已经说过的可启动图像,这还不足以帮助我吗?

标签: assembly x86 nasm boot sector


【解决方案1】:

只需这样做:
nasm -f bin -o boot.bin boot.asm
qemu -boot order=a -fda boot.bin

您应该会看到该消息。对于其他模拟器,您需要将图像填充到 1474560 字节。

boot.asm:

        BITS 16
        ORG 0
        jmp 0x07c0:start

start:
        mov ax, cs
        mov ds, ax

        mov si, msg
        call print_string

hang:
        jmp hang

print_string:
        cld
        lodsb
        or al, al
        jz .done
        mov ah, 0x0E
        int 0x10
        jmp print_string
.done:
        ret

msg:    db 'Hello World!', 13, 10, 0

        times 510-($-$$) db 0
        dw 0xAA55

【讨论】:

  • 不是最优雅的悬挂方式。我会设想一些涉及 int 9h 或 16h
  • 您不能确保代码在CS=0、IP>=0x7C00 下运行,并且您没有在LODSB 之前使用CLD 清除FLAGS.DF
  • 如果这个答案被接受,它解决了什么问题?
猜你喜欢
  • 2011-10-02
  • 2016-01-27
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2019-08-22
  • 1970-01-01
相关资源
最近更新 更多