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

使用DOSBox MASM调试汇编程序时INT 21H输入无响应问题求助

解决DOSBox中afdebug跳过INT 21H输入的问题

我明白你在DOSBox用MASM学汇编时,遇到了afdebug调试器直接跳过INT 21H(AH=01H)输入指令的困扰——本来该弹出输入界面的地方直接跳过去了,完全没法测试输入逻辑对吧?这在第三方DOS调试器里是个挺常见的小问题,给你几个实用的解决办法:

1. 换用DOSBox自带的debug工具

afdebug对DOS系统中断的模拟支持不算太完善,而DOSBox原生的debug工具对INT 21H这类中断的处理更贴合真实DOS环境:

  • 关掉当前的afdebug会话,在DOSBox命令行输入:debug test.exe
  • 输入g运行到程序入口,之后用p(逐过程执行)或者t(逐单步指令执行)推进。当走到INT 21H时,DOSBox会自动切换到输入状态,你直接敲字符就行。

2. 调整afdebug的中断交互设置

要是你习惯用afdebug不想换,可以试试开启它的中断交互模式:

  • 启动调试时加-i参数:afdebug -i test.exe,强制让调试器对中断指令做交互式处理
  • 调试过程中输入命令int on,也能临时开启中断暂停等待输入的功能

3. 确认程序代码的完整性

从你给出的代码片段看,要确保输入相关的指令是连续且正确的,完整的输入逻辑应该是这样的:

MOV AH,01H   ; 调用DOS中断的字符输入功能
INT 21H      ; 执行中断,等待输入
MOV LOL,AL   ; 把输入的ASCII码保存到LOL变量里

如果指令顺序错了或者漏了关键步骤,也可能导致调试器异常跳过中断。

4. 手动模拟输入(应急方案)

要是上面的方法都没效果,你可以在执行INT 21H前手动设置寄存器值来模拟输入:

  • 在afdebug中执行到MOV AH,01H后,输入r al,然后把AL寄存器的值改成你想输入的字符的ASCII码(比如r al 41就对应大写字母A),再执行INT 21H,程序就会把你设置的AL值当作输入内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:21