我有这个代码打算打印字符串的第一个字母:
mov bx, message ; Move the address of the message to bx
add bx, 0x7c00 ; Adding the padding of bootsector to bx
mov al, [bx] ; Move the value at the address in bx to al
int 0x10 ; Interrupt drawing the character in al to screen
为什么这不起作用:
message:
db "Test", 0
但这有效:
message:
db "Test", 0, 0
第一个打印出一些随机字符,第二个打印出我信息的第一个字母。
代码用NASM编译成.bin并在Bochs中作为bootsector运行。
**编辑
完整代码:
mov ah, 0x0e
message:
db 'Booting MainOPS', 0
printTheMessage:
mov bx, message
add bx, 0x7c00
mov al, [bx]
int 0x10
jmp $
times 510 - ($-$$) db 0
dw 0xaa55
答案 0 :(得分:1)
正如@Jester所猜测的那样。您执行message
,因为它是代码。代码执行从mov ah, 0x0e
开始,然后它继续直接跟随它的字节,即字符串'Booting MainOPS', 0
,然后它跟随printTheMessage
代码。
将message
移至无限循环之后,或在第一条指令之后将jmp
添加到printTheMessage
。