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

