在引导扇区中使用函数时汇编语言打印垃圾值
assembly language printing garbage value while using functions in boot sector
你好,我只是想用汇编语言的函数打印 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
我不知道我哪里出错了,但上面的程序正在打印一些垃圾值。有人可以帮我解决这个问题吗??
首先,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
以获得更小的代码大小
你好,我只是想用汇编语言的函数打印 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
我不知道我哪里出错了,但上面的程序正在打印一些垃圾值。有人可以帮我解决这个问题吗??
首先,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
以获得更小的代码大小