测试本机 x86 程序,构建可启动映像/驱动器

发布于 2025-01-06 09:08:58 字数 649 浏览 1 评论 0原文

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

nasm -f bin source -o out

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

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

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

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

至于测试,每次重新启动 PC 都非常糟糕,因此最好使用一些虚拟操作系统软件,如 Vbox、VMWare 等。

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

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

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

我想,我有很多错误...

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

我做错了什么?

我该如何解决我的问题?

I have the next problem: I'm working with NASM and building some native and compiling it on this way:

nasm -f bin source -o out

I'm getting my native program for x86.

And now the most interesting, how can I make it bootable and then test it?

As I think there are 3 ways to make bootable ( but for me, all they has failed :( )

  • using mkbt utility ( or another soft which is similar ) to write it to floppy disk
  • building ISO image, with editing bootable sector in it
  • manually write memory sector to usb/sd-card or another driver

As for testing, all times rebooting PC is very bad, so it's better to use some Virtual OS soft like Vbox, VMWare etc..

So I used VBox for this.
For building ISO - I used CDBurnerXP.

With cdburner I have optioned bootable sector for my native program, then choose new ISO in Vbox as disk from which will my program boot.

The result is always empty screen, no errors are showed, just nothing...

I think, that I have many errors...

Using mkbt, I can't write it to usb driver.... I don't have flooppy now, so I'm not able to write image to floppy, mkbt can't write to usb... :(

What do I wrong?

How can I solve my problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮光之海 2025-01-13 09:08:58

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

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

启动.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

Just do this:
nasm -f bin -o boot.bin boot.asm
qemu -boot order=a -fda boot.bin

And you should see the message. For other emulators you'll want to pad the image to
1474560 bytes.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文