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

时间:2016-09-25 16:51:49

标签: assembly nasm boot

您好我只是尝试使用汇编语言中的函数打印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

我不知道我哪里出错了,但上面的程序正在打印一些垃圾值。有人可以帮我解决这个问题吗?

1 个答案:

答案 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