您好我只是尝试使用汇编语言中的函数打印2条消息(一个简单的启动扇区程序),这是我的代码:
[org 0x7c00]
mov bx,HELLO_MSG
call printer
mov bx,GOODBYE_MSG
call printer
jmp $
printer:
pusha
mov ah,0x0e
mov al,bl
int 0x10
popa
ret
HELLO_MSG:
db 'Hello, World',0
GOODBYE_MSG:
db 'Bye User',0
times 510-($-$$) db 0
dw 0xaa55
我不知道我哪里出错了,但上面的程序正在打印一些垃圾值。有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
首先,AL
期望打印一个字符,但是你给它一个指向内存地址的指针的低字节,其中存储了文本的第一个字节。
其次,函数0x0e仅在AL
中打印一个字符,因此要打印整个字符串,您应该遍历它。
第三,BX
不是存储字符串指针的最佳寄存器。更好地使用SI
。
拥有所有这些,
pusha
mov ah, 0x0e
__continue:
mov al, [si]
inc si
test al, al ; terminating null reached?
jz __ret ; yes, exit
int 0x10
jmp __continue
__ret:
popa
ret
对于较小的代码大小, mov al, [si] / inc si
可以更改为lodsb