dosbox masm输入和debug

时间:2018-03-20 12:53:51

标签: debugging input masm dosbox

我正在使用DOSBox MASM来学习汇编语言。但是,我想提供输入和debug。也就是说,我想逐行执行我的程序,并且只要输入

INT 21H

来。我正在调试

afdebug test.exe

但是一看到

MOV AH,01H
INT 21H

调试刚刚在INT 21H之后跳过,并且没有提示任何屏幕进行输入。

以下是程序:

.MODEL SMALL
        .STACK 64
        .DATA
MSG DB "ENTER A CHARACTER:$"
ORG 0030H
LOL DB ?
        .CODE
            MOV AX,@DATA
            MOV DS,AX
            LEA DX,MSG
            MOV AH,09H
            INT 21H
            MOV AH,01H
            INT 21H
            MOV LOL,AL
            MOV AH,4CH
            INT 21H
        END

2 个答案:

答案 0 :(得分:0)

几天前我遇到了这个问题,终于解决了。然后调试代码使用指令t

  

执行一条指令,然后显示所有寄存器的内容,所有标志的状态以及Debug接下来将执行的指令的解码形式。

在DosBox中,根据wikipedia,我发现INT 21H之后,下一条指令是STI

  

STI指令通过设置IF来启用中断。

因此,在STI指令之后,您可以进行输入。

您可以访问https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc722863(v=technet.10)中的其他详细信息,以了解有关调试指令的更多信息。

答案 1 :(得分:0)

我通过以下方法解决了我的问题
我认为中断标志在调试模式下被重置,所以调用 int 21h 什么都不做。
“如果中断标志被重置 (0),微处理器将无法识别任何中断请求并将忽略它们。”
我尝试的是在调用任何中断之前更改我的代码并包含 STI。(STI 代表设置中断标志) 现在,当我在调试模式下运行应用程序时,我可以提供输入