我正在尝试编写一个启动加载程序,但在我找到这个问题之前,我的实验都没有奏效:Why doesn't this boot loader code work?
我简化了这个程序,只是将一个字符写入屏幕。
[ORG 0x7C00]
[BITS 16]
realstart:
jmp start
nop
start:
xor ax,ax
mov ds,ax
mov es,ax
xor bx,bx
mov ah, 0x0e
print:
mov al, "A"
int 0x10
end:
cli
hlt
times 510 - ($-$$) db 0
dw 0xAA55
它编译得很好,但在objdump中没有任何int 0x10命令。
如果我留下字符串(this file),一切正常。
捕获的地方在哪里?
(使用Cygwin Win7 SP1上的NASM 2.08.02-1进行编译)
答案 0 :(得分:0)
代码似乎没有任何问题。如果用ndisasm反汇编代码会产生缺少int 0x10的结果,那将是非常奇怪的。所以我想你会谈到在运行时转储代码。引导程序通常在跳转指令之后包含引导记录(它告诉引导加载程序有关介质的大小等)。也许BIOS出于某种原因正在考虑它认为的引导记录?
答案 1 :(得分:0)
Bits 16
org 0x7c00
start:
xor ax,ax
mov ah,0x0E
mov al,'A'
int 10h
mov al,10h
int 16h
int 19h
hlt
times 510-($-$$) db 0
dw 0xAA55
试试此代码。如果它不起作用,请告诉我。