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

TASM调用int 10h切换13h图形模式时左上角残留命令行提示符问题

问题原因

mov ax, 13h 搭配 int 10h 的VGA模式切换代码本身没有错误,出现提示符残留、仍可输入DOS命令的核心原因是程序结构不完整:

  • 仅执行模式切换指令后,代码没有阻断执行流的逻辑,CPU运行完这两行指令后会继续向下执行内存中的后续指令,很快触发程序退出流程,将控制权交还给DOS的command.com命令解释器。
  • 切换到图形模式后没有主动清空对应显存,之前文本模式下显存中存储的命令提示符点阵数据会直接被VGA硬件渲染显示;command.com拿到控制权后,会默认在当前活动显示页输出提示符、接收键盘输入——本质上此时你的汇编程序已经运行结束,系统已经回到DOS命令行交互状态,只是显示模式还停留在13h图形模式,才会出现异常残留现象。
修复方法
  • 补全DOS汇编程序的标准结构,在模式切换代码后增加执行流阻断逻辑(比如等待用户按键、进入业务逻辑死循环),避免程序立刻退出把控制权交还给命令行。
  • 切换到13h图形模式后,主动清空该模式对应的显存段(起始段地址为0A000h,总长度为320*200=64000字节),消除之前文本模式的显存残留内容。
  • 程序需要退出时,先调用BIOS中断切回默认的80*25文本模式(模式号3),再调用DOS中断的退出功能正常返回命令行。

可直接在TASM下编译运行的最小修复示例代码如下:

; 按COM程序格式编译,TASM编译链接命令:tasm test.asm; tlink /t test.obj;
code segment
assume cs:code, ds:code
org 100h
entry:
    ; 切换至13h 320*200 256色图形模式
    mov ax, 13h
    int 10h

    ; 清空图形模式显存,全填0实现黑屏
    mov ax, 0A000h
    mov es, ax
    xor di, di
    xor al, al
    mov cx, 320*200
    rep stosb

    ; 等待用户按任意键,阻断执行流提前返回DOS
    mov ah, 0
    int 16h

    ; 切回默认80*25文本模式
    mov ax, 3
    int 10h

    ; 调用DOS功能退出程序,返回命令行
    mov ah, 4ch
    int 21h
code ends
end entry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:21:26