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

x86汇编程序运行结束后出现异常输出问题排查

问题:实模式屏幕改色程序在Win2000/XP下结束时出现异常输出

我编写了一段用于更改屏幕颜色的测试代码,虽知晓有更优的改色方案,但仅作测试用途。程序运行过程正常,但在Win2000和WinXP系统下,执行到末尾时都会出现异常输出。

测试代码

MOV AH,00H
MOV AL,13H
INT 10H

MOV BH,00H
MOV DX,0000H
OuterLoop:
MOV CX,0000H
InnerLoop:
MOV AL,2AH
MOV AH,0CH
INT 10H
INC CX
CMP CX,013FH
JBE InnerLoop
INC DX
CMP DX,00C7H
JBE OuterLoop

MOV AH,00H
INT 21H

现象说明

  • 背景颜色显示正常:程序运行过程中屏幕能正确呈现预期的改色效果
  • 程序结束时的异常输出:程序执行到末尾等待输入时,屏幕出现乱码或异常字符输出

问题原因与解决方法

问题根源

程序最后调用的INT 21H AH=00H是DOS中断的键盘输入功能,但在Win2000/XP的NTVDM虚拟环境下,当前显卡处于VGA图形模式(13H模式,320x200 256色),直接调用该中断会触发系统尝试恢复文本模式,但图形模式未提前切换,导致文本输出与显卡显示模式不匹配,从而出现乱码/异常输出。

修复方案

在调用键盘输入中断前,先将视频模式切换回标准文本模式(比如3号模式,80x25彩色文本),修改后的代码末尾如下:

; 先切换回文本模式
MOV AH,00H
MOV AL,03H
INT 10H

; 再等待键盘输入
MOV AH,00H
INT 21H

这样就能保证系统在文本模式下处理键盘输入,避免模式冲突导致的异常输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:57:07