小编Oac*_*tzl的帖子

引导加载程序在 qemu 中工作,但在 virtualbox 和硬件上失败

我的引导加载程序由两个 512 字节的阶段组成。阶段 1 由 bios 加载到 MBR 区域。stage1 然后继续从驱动器加载 stage2 并跳转到它。

我用十六进制编辑器确认最终二进制“program.bin”的大小正好是 1024 字节长,并且包含两个“签名”(每个阶段的最后两个字节,0xAA55 用于 stage1(MBR 签名)和 0xCC77 用于 stage2)。

预期产出是:

1 // stage1 started
0000 or 0080 // drive# in hex
CC77 // stage2 "signature" in hex
2 // stage2 started
Run Code Online (Sandbox Code Playgroud)

这在 QEMU 中工作正常,但在 virtualbox 和硬件上失败。在我看来,stage2 加载无声无息地失败(错误分支没有被调用),我希望解决这个问题两周,但没有成功。

QEMU 输出
QEMU 输出

硬件和 Virtual Box 输出
VBox 输出

stage1.asm:

global _start
extern _stage2
extern _stage2data

BITS 16

_start:
; init registers
    xor ax, ax
    mov es, ax
    mov gs, ax
    mov ss, ax …
Run Code Online (Sandbox Code Playgroud)

boot assembly mbr x86-64

6
推荐指数
1
解决办法
217
查看次数

标签 统计

assembly ×1

boot ×1

mbr ×1

x86-64 ×1