NASM开发操作系统bootloader时BIOS打印函数单次输出两个字符求助
问题根源
你的%include "print.asm"放置位置错误,导致打印函数被执行了两次:
- 第一次是你主动调用
call print_char,完成第一个字符的打印,函数执行完ret后会回到call指令的下一行继续执行 - 你把
print.asm的内容直接嵌在了call print_char的下一行,没有任何跳转指令阻拦,所以ret返回后会直接顺序执行print_char的函数代码,触发第二次打印,这就是你看到单次调用输出两个字符的原因。
修复方案
调整bootloader.asm的代码顺序,把函数实现放在主逻辑的死循环之后,避免被顺序执行到:
[BITS 16] [ORG 0x7c00] mov al, 65 call print_char jmp $ ; 主逻辑结束后直接死循环,不会往下执行函数代码 %include "print.asm" ; 函数实现放在死循环后方,仅被call调用时才会执行 times 512-($-$$) db 0 dw 0xaa55
调整后运行就只会输出单个'A',符合预期。
内容的提问来源于stack exchange,提问作者Nttkkhanh
相关产品推荐
相关产品推荐

