【发布时间】:2019-08-24 12:47:42
【问题描述】:
我正在编写一个两阶段引导加载程序 这是我的 boot.asm
[org 0x7c00]
[bits 16]
xor ax, ax
mov ds, ax
mov es, ax
xor bx, bx
mov ah, 0x0E
mov al, 'A'
int 0x10
jmp 0x8000
cli
hlt
times 510 - ($-$$) db 0
dw 0xAA55
还有 boot2.asm
[org 0x8000]
[bits 16]
xor ax, ax
mov ds, ax
mov es, ax
xor bx, bx
mov ah, 0x0E
mov al, 'B'
int 0x10
我使用它编译它
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o boot2.bin boot2.asm
它编译时没有任何错误或警告。 但是我将如何将 stage 2 放在 0x8000 并将 stage1 和 stage2 链接到一起工作?
【问题讨论】:
-
根据您的代码 stage2 是 0x7e00 而不是 0x8000。您的第一阶段必须使用 Int 13/ah=2 之类的方式将第二阶段读入内存
-
没关系,但我将如何链接它们
-
这是一个第一阶段读取第二阶段并使用 NASM 生成 1.44MB 磁盘映像的示例:stackoverflow.com/a/54894586/3857942
-
您是在 Windows 上进行开发吗? Linux? macOS?
-
哦,我正在安卓手机上开发!!!您一定会感到惊讶,但这是真的,我是一个使用 termux 的安卓终端模拟器。
标签: assembly nasm x86-16 bootloader stage