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

引导扇区打印字符串出现多余空格,求原因解析

引导扇区打印字符串出现多余空格的原因及解决

问题根源

你的print函数执行顺序有误:当前逻辑是先加载字符到al,立即调用BIOS中断int 0x10打印,之后才判断是否为空终止符。这导致空字符(0)也被传递给了BIOS的0x0e输出功能。

BIOS的0x0e功能(电传打字机模式输出)处理不可打印的ASCII控制字符(比如0)时,终端会将其显示为空格,这就是你看到字符串后多出空格的原因。

修正后的汇编代码

调整判断与打印的顺序,先检查是否为空字符,再执行打印操作:

[org 0x7c00]

mov ah, 0x0e
mov bx, msg
call print

mov bx, msg1
call print

jmp $

print:
        mov al, [bx]
        cmp al, 0          ; 先判断是否为空终止符
        je print_done      ; 是空字符则直接退出
        int 0x10           ; 非空才调用BIOS打印
        inc bx
        jmp print
print_done:
        ret

msg db "hello",0
msg1 db "goodbye",0

times 510-($-$$) db 0
dw 0xaa55

也可以用更高效的test指令替代cmp al,0:

print:
        mov al, [bx]
        test al, al        ; 测试al是否为0,等价于cmp al,0但占用更少指令字节
        jz print_done
        int 0x10
        inc bx
        jmp print
print_done:
        ret

验证效果

修改后运行QEMU,输出会变成hellogoodbye,不再有多余空格。

内容的提问来源于stack exchange,提问作者Aave Tatti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:32:25