You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在emu8086中设置正确屏幕尺寸并解决字符显示异常问题

解决emu8086迷宫游戏的全屏像素化与字符颜色问题

我来帮你搞定这两个棘手的问题,咱们一步步拆解解决:

问题1:全屏后画面像素化

你当前用mov ax,19切换到的是320×200的256色图形模式,这个分辨率本身很低,全屏显示时系统会强行拉伸低分辨率像素,自然就出现了模糊的像素化效果。

解决方案:切换到适配字符输出的文本模式。你的需求是打印坐标、方块字符,文本模式天生适合这类场景,不会有拉伸失真问题。推荐使用模式3——这是80列×25行的标准彩色文本模式,完美适配全屏字符显示。

问题2:字符219显示银色而非黑色

你之前用int 10h的0Eh号功能(Teletype输出)时,在图形模式下bl的作用和09h功能(写字符及属性)不兼容,导致颜色没有按预期生效。换成文本模式后,我们可以先统一设置全屏的属性(白背景+黑前景),后续所有字符输出都会自动继承这个属性,包括字符219。


修改后的完整代码

mov ax, 03h        ; 切换到80×25彩色文本模式(替代原19h图形模式)
int 10h

mov ax, 0600h      ; 06h功能:向上滚动窗口(实现清屏)
mov bh, 0F0h       ; 窗口属性:高4位背景色(0F=白色),低4位前景色(0=黑色)
mov cx, 0000h      ; 窗口左上角坐标(0,0)
mov dx, 184Fh      ; 窗口右下角坐标(24,79)(25行对应0-24,80列对应0-79)
int 10h

mov dl, 0          ; 设置光标列坐标
mov dh, 1          ; 设置光标行坐标
mov bh, 0          ; 指定显示页
mov ah, 02h        ; 调用设置光标位置功能
int 10h

mov cx, 0
first:
mov al, 219        ; 方块字符的ASCII码
mov ah, 0Eh        ; 调用Teletype字符输出功能
int 10h
inc cx
cmp cx, 80
jne first

关键代码说明

  1. 切换文本模式ax=03h是PC标准的80×25彩色文本模式,全屏显示时字符清晰无拉伸失真。
  2. 全局属性设置:通过06h清屏功能一次性设置整个屏幕的背景为白色、前景为黑色,后续所有字符输出都会自动沿用这个属性。
  3. 字符输出逻辑:保留了你原本的光标定位和循环输出逻辑,但现在在文本模式下,字符219会以黑色(前景色)显示在白色背景上,完全符合你的需求。

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

火山引擎 最新活动