我必须在汇编中定义一个函数,它允许我循环一串声明的字节并使用 BIOS 中断打印它们。我是16位实模式。这是一个从教科书中编写一个小引导加载程序的练习,但它似乎只是一个草稿,它缺少一些东西。我得到了以下代码:
org 0x7c00
mov bx, HELLO_MSG
call print_string
mov bx, GOODBYE_MSG
call print_string
jmp $ ;hang so we can see the message
%include "print_string.asm"
HELLO_MSG:
db 'Hello, World!', 0
GOODBYE_MSG:
db 'Goodbye!', 0
times 510 - ($ - $$) db 0
dw 0xaa55
我的 print_string.asm 看起来像这样:
print_string:
pusha
mov ah, 0x0e
loop:
mov al, bl
cmp al, 0
je return
int 0x10
inc bx
jmp loop
return:
popa
ret
我对自己在做什么有一些想法,但是这本书没有解释如何迭代某些东西。我知道如何在 C 中做到这一点,但这是我第一次将汇编用于调试 C 代码以外的其他事情。当我通过模拟器启动时会发生什么,它会打印出几行乱码,并最终挂在那里让我看到我的失败。哈哈哈。