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
相关产品推荐
相关产品推荐

