在接下来的几天里,我似乎可能会在这里... ...)
我的代码如下,适用于BOCHS x86模拟器
-- BOOT.ASM --
[org 0x7c00]
mov dx, 0x7c00
call printhex
mov bx, printthistoo
call printaddr
jmp $
%include "print.asm"
printthis:
db 'Letters!', 0
printthistoo:
db ' Yes, all of these!', 0
times 510-($-$$) db 0
dw 0xaa55
-- PRINT.ASM --
printaddr:
pusha
mov ah, 0x0e
lp:
mov al, [bx]
cmp al, 0
jne printch
jmp doneaddr
printch:
int 0x10
add bx, 1
jmp lp
doneaddr:
popa
ret
printhex:
mov cx, 0x3
mov ax, 0xF
lph:
mov bx, 0x0
add bx, ax
and bx, dx
cmp bx, ax
je log
sub ax, 0x1
jmp lph
log:
cmp ax, 0x9
jle lognum
jmp loglet
finlog:
cmp cx, 0x0
je printnd
mov ax, 0xF
sub cx, 0x1
shr dx, 4
jmp lph
lognum:
mov bx, extemplate
add bx, cx
add bx, 0x2
add ax, 48
mov [bx], al
jmp finlog
loglet:
mov bx, extemplate
add bx, cx
add bx, 0x2
add ax, 0x7
add ax, 48
mov [bx], al
jmp finlog
printnd:
mov bx, extemplate
call printaddr
ret
extemplate:
db '0x0000', 0
经过BOCHS的几次尝试,我决定在我的物理计算机上尝试代码。我将代码加载到带有RUFUS的USB记忆棒上并启动它。然而,所发生的一切都是光标吓坏了,然后在屏幕上打印了一个铲子字符。谁能告诉我我做错了什么?