我有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
问题是为什么在NOP
之后INT 21
而不是INC dl
? AFAIK应该INC dl
然后LOOP xxxx
三次INT 20
。
当我连续按-t
时,它会移动到某个我不知道直到崩溃的地方,意味着无法找到INT 20h
显示INC dl
和LOOP 0107
表示循环。
仅供参考:
答案 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。