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

BIOS中断0x10/AH=0x13写字符串仅移动光标无输出问题求助

问题原因与解决方案

你的代码核心问题有两个可复现的诱因,对应修复方案如下:

1. 编译参数缺失导致地址重定位错误

如果你在64位Linux环境下编译,默认as和ld会按64位目标处理程序,即使你加了.code16伪指令,也可能出现16位立即数地址截断错误。需要显式指定32位目标模式:
修改编译命令为:

as --32 hello.s -o hello.o
ld -m elf_i386 -N -e start -Ttext=0x7c00 hello.o -o hello.elf
objcopy -O binary hello.elf hello

2. QEMU --nographic 模式的显示限制

QEMU的--nographic模式会禁用VGA图形界面,仅将串口输出重定向到当前终端:

  • 你自定义的print函数用int 0x10 AH=0xE单字符打印,该功能会被QEMU特殊处理,输出会同步到串口,所以能正常显示。
  • AH=0x13批量写字符串功能是直接操作VGA显存,QEMU在--nographic模式下不会将这部分显存内容同步到串口,因此你只能看到光标移动(光标状态由BIOS维护,会被同步),看不到实际字符。

验证修复:

去掉运行命令中的--nographic参数,用图形界面运行即可看到输出:

qemu-system-i386 -hda hello

如果必须使用无图形模式,建议继续使用AH=0xE实现打印功能,或额外配置QEMU开启VGA文本缓冲区到串口的重定向。

可选兼容优化

为了适配更多BIOS实现,建议在代码开头显式初始化DS寄存器并清零方向标志位:

start:
  xor %ax, %ax
  mov %ax, %ds
  cld
  mov $start, %sp
  # 后续代码不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:06