DOS DEBUG跟踪命令无法正常运行

Dar*_*ber 2 debugging assembly dos tasm x86-16

我有abc使用循环语法打印的ASM代码。这是我的代码

;abc.com
.model small
.code
org 100h
start:
    mov ah, 02h
    mov dl, 'a'
    mov cx, 3h

ulang:
    int 21h
    inc dl
    loop ulang

    int 20h
end start
Run Code Online (Sandbox Code Playgroud)

COM程序正常运行 在此处输入图片说明

debug abc.com跟着的结果-t看起来像 int 21之后的NOP

问题是,为什么要NOP在之后INT 21而不是INC dl?据我所知它应该INC dl那么LOOP xxxx三次,然后INT 20

当我-t连续按下时,它会一直到不知道的地方直到崩溃,这意味着找不到INT 20h

debug abc.com跟是不同的-u 红色arr表示循环

它显示INC dlLOOP 0107指示循环。

仅供参考:

  • Win 7 Ultimate SP 1 32位
  • GUI Turbo ASM x86 3.0
  • 赛扬双核n2840

Mic*_*tch 5

Tdebug中的race命令与现代调试器的STEP INTO功能等效。该int指令(像call)执行一系列的指令,然后返回给调用者。T竞赛将进入软件中断处理程序或函数,并一次执行一条指令。用于调试的MSDN文档说明了有关T种族的信息:

执行一条指令并显示所有寄存器的内容,所有标志的状态以及所执行指令的解码形式。

在您的情况下,您命中int 21h并跳至CS:IP 00A7:107C 处的软件中断处理程序代码。如果遍历所有中断处理程序代码,最终将到达指令所在的CS:IP 1400:0109 INC DL

为了执行功能或中断而无需单步执行与之相关的每条指令,可以使用proceed命令。继续类似于现代调试器的STEP OVER功能。中断处理程序或函数/子例程的代码将执行,然后在INTCALL指令之后中断该指令。

该文档说明了有关PROCEED的信息

当p命令将控制从Debug转移到要测试的程序时,该程序将无中断运行,直到完成循环,重复的字符串指令,软件中断或指定地址的子例程,或者直到执行了指定数量的机器指令为止。控制然后返回到调试。