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

如何通过x86 BIOS调用移动光标?bootloader下设置光标位置失败求助

问题原因分析

首先纠正《Operating systems from 0 to 1》此处的参数描述错误:BIOS INT 0x10 中断AH=0x02(设置光标位置)功能的寄存器定义为:

  • AH:固定为0x02,代表设置光标位置的功能号
  • BH:显示页号,不是Y坐标
  • DH:光标行号(Y坐标,从0开始计数)
  • DL:光标列号(X坐标,从0开始计数)
  • BL 寄存器在该功能下无作用

你当前代码的核心错误有2个:

  1. 没有给行、列对应的DH、DL寄存器赋值,系统会使用寄存器默认值,大概率是0
  2. 显示页号设为了0x1,实模式下默认激活显示的是第0页,你修改第1页的光标位置,在当前显示的第0页上自然看不到变化

修正后的代码示例

如果你要将光标移动到第2行(Y=1,0起始)、第5列(X=4,0起始),正确代码如下:

MovCursor:
    pusha

    mov ah, 0x02    ; 调用设置光标位置功能
    mov bh, 0x0     ; 操作当前默认显示的第0页
    mov dh, 0x1     ; 行号Y=1
    mov dl, 0x4     ; 列号X=4
    int 0x10

    popa
    ret             ; 不要漏返回指令

补充排查点

如果按维基百科的方法尝试仍不生效,可检查以下项:

  • 80x25默认文本模式下,行号最大值为24、列号最大值为79,超出范围时BIOS会自动将光标重置到左上角
  • 如果你确实需要使用第1页,需要先调用INT 0x10 AH=0x05 AL=0x1切换当前显示页到第1页,否则修改非显示页的光标不会有视觉变化
  • 确认该函数被正确调用,没有漏写ret指令导致执行流异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:15:04