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

x86-16汇编开发Pong游戏:如何用BIOS int 10h修改文本背景色

解决Pong游戏得分文本绿色背景的问题

核心问题分析

你用int 10h ah=0eh(Teletype文本输出)显示得分,但对BIOS文本属性的设置逻辑有误:

  • int 10h ah=09h的配置对你的printf函数无效,因为09h是显存字符属性设置,而0eh是独立的Teletype输出,属性由BL寄存器直接控制
  • 你之前尝试的MOV BL,1EH是蓝底黄字的属性,且没有在调用0eh中断前正确传递这个属性值

BIOS文本属性规则

文本属性是1字节,格式划分:

  • 高4位:控制背景色
  • 低4位:控制前景色
    常用颜色代码(十六进制):
    0=黑,1=蓝,2=绿,3=青,4=红,5=品红,6=棕,7=白,8=灰,9=亮蓝,A=亮绿,B=亮青,C=亮红,D=亮品红,E=亮黄,F=亮白

要实现绿色背景,需把高4位设为2(对应0x20),再搭配你需要的前景色(比如白色0x07),最终属性值为0x27。

修改代码方案

在你的printf函数中,每次调用int 10h ah=0eh前设置BL为目标属性:

printf:
    lodsb
    cmp al, 0
    je finish
    mov ah, 0eh
    mov bl, 0x27 ; 绿色背景 + 白色前景(可调整低4位更改前景色)
    int 10h
    jmp printf
finish:
    ret

额外说明

清屏用的int 10h ah=06h中的bh=2是滚动区域的填充属性,仅影响清屏后的屏幕背景,和文本显示的属性是独立的,所以必须单独为文本输出设置BL属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:27:19