x86系列的cpu有个中断叫单步,也就是int1, 这个中断不能由程式发出,但只要标志暂存器里的第09bit(也就是IF)被设定为1时,则cpu每执行一条指令,都会产生一个int1单步中断.
一如其他的中断,cpu会把控制权转移到中断向量表(0-400h)中,01中断的地址上去(0:0003-0:0006),也是说,cp:ip会跑到那个地址的新cs:ip去
先看图

随便载入一个程式,按r时,会看见一堆暂存器,其中有cs:ip的值,但这时候真正在内存运行的程式并不是那个被载入的程式,而是debug本身,debug只是列出该程式被载入时的初始形况,当你按下t, 或 p 或 g 时,debug 才会根据要求, [重新]把控制权,也就是cs:ip发还给被载入的程式.
至于如何取回控制权,就要看你键入t,p,还是g xxx或紧跟其后的参数决定.
假如你按了t, debug会把一切环境还原到载入程式的那个被挂起的形况(按R时看见的一切),
做一些适当设定,再把标志暂存器的if设为1,顺便改了中断表中的int1指向自己,最后才把被挂起桯式的cs:ip还原.
好了,该程式执行一条指令,触发单步中断,cpu把控制权发还到int1的中断地址去,也就是debug(之前修改了)
debug回来了,保存刚被挂起程式的一切暂存器,并印出,然后等待你的下一步指示..
图中的 t 5 ,意即跟踪5步,在debug而言是做5次的单步工作