You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM开发操作系统bootloader时BIOS打印函数单次输出两个字符求助

问题根源

你的%include "print.asm"放置位置错误,导致打印函数被执行了两次:

  1. 第一次是你主动调用call print_char,完成第一个字符的打印,函数执行完ret后会回到call指令的下一行继续执行
  2. 你把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:06:02