在引导扇区中使用函数时汇编语言打印垃圾值

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 以获得更小的代码大小