DOS DEBUG跟踪命令无法正常工作

时间:2016-03-11 17:26:19

标签: assembly dos tasm x86-16

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

;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

COM程序正常运行 enter image description here

debug abc.com后跟-t的结果如下 NOP after int 21

问题是为什么在NOP之后INT 21而不是INC dl? AFAIK应该INC dl然后LOOP xxxx三次INT 20

当我连续按-t时,它会移动到某个我不知道直到崩溃的地方,意味着无法找到INT 20h

debug abc.com后跟-u不同 red arr indicate loop

显示INC dlLOOP 0107表示循环。

仅供参考:

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

1 个答案:

答案 0 :(得分:4)

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

  

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

在您的情况下,您点击int 21h并跳转到 CS:IP 00A7:107C处的软件中断处理程序代码。如果你追踪所有的中断处理程序代码,你最终会到达{em> CS:IP 1400:0109 INC DL指令。

为了在不逐步执行与之关联的每条指令的情况下执行函数或中断,可以使用p roceed命令。继续类似于现代调试器的 STEP OVER 功能。中断处理程序或函数/子程序的代码将执行,然后在 INT CALL 指令之后中断指令。

文档说明了 PROCEED

  

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