我的代码在 virtualbox 中完美运行,但在真正的 PC 上启动时(从 BIOS 检测为 USB 硬盘驱动器的 USB 笔式驱动器)无法正常运行。
在虚拟盒中;代码将磁盘的第 2 和 3 扇区读取到内存,打印前 128 个字节(作为调试步骤),然后执行存储在这些扇区中的代码。
在我的真实 PC 上,它成功地将正确的字节打印到屏幕上(显然是正确读取磁盘,并将其写入内存中的预期位置),但随后停止执行而不是跳转。
为什么会有所不同,我可能做错了什么?
ORG 0x7C00;
; Load Sector 2&3 from disk to 0x1000
mov bx , 0x1000
mov ah , 0x02
mov al , 0x02
mov ch , 0x00
mov dh , 0x00
mov cl , 0x02
int 0x13;
;Print 0x1000 + 128 bytes
mov ah, 0x0e
mov bx ,0x1000;
loop2:
mov al, [bx]
cmp bx, 0x1000+128
je end2
int 0x10
add bx , 1;
jmp loop2;
end2:
; Run our code
call 0x1000
jmp $;
TIMES 510 - ($ - $$) DB 0
DW 0xAA55