-22- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
![]() |
为了能够看到程序执行的细节情况,我们先学习DEBUG的一个新命令--T。T命令主要用于"跟踪"(TRACE)程序,这是DEBUG最重要的功能。利用T命令,我们可以一次执行一条指令,每执行一条指令后DEBUG都会把所有的寄存器内容列出来,这样即可看到指令执行的结果。我们现在跟踪这个程序。 | ||||||||||||||||||||
程序输入完毕,我们首先使用"R"命令将所有寄存器的当前值列出,重点观察一下SP寄存器与AX寄存器的值。 | |||||||||||||||||||||
-r | AX寄存器的初值 | SP寄存器的指向 | |||||||||||||||||||
AX=0000 | BX=0000 | CX=000A | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0B01 | ES=0B01 | SS=0B01 | CS=0B01 | IP=0100 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0B01:0100 | B83412 | MOV AX,1234 | 第一条待执行的指令 | ||||||||||||||||||
现在我们输入一个"T"命令,CPU就会将第一条指令"MOV AX,1234"执行,执行之后DEBUG会将执行结果显示出来。 | |||||||||||||||||||||
-t | 注意此寄存器的变化 | 指令指针的增加 | |||||||||||||||||||
AX=1234 | BX=0000 | CX=000A | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0B01 | ES=0B01 | SS=0B01 | CS=0B01 | IP=0103 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0B01:0103 | BBCDAB | MOV BX,ABCD | 第二条待执行的指令 | ||||||||||||||||||
以上显示的内容就是执行了指令"MOV AX,1234"之后的各寄存器的状态,可以看到AX寄存器中确实存入了1234。另外一点,请注意IP寄存器的变化情况。 再次输入"T"命令,则指令"MOV BX,ABCD"也会被执行。 |
|||||||||||||||||||||
-t | BX寄存器存入ABCD | 指令指针继续增长 | |||||||||||||||||||
AX=1234 | BX=ABCD | CX=000A | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0B01 | ES=0B01 | SS=0B01 | CS=0B01 | IP=0106 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0B01:0106 | 50 | PUSH AX | 需要重点观察的指令 | ||||||||||||||||||
"PUSH"指令的执行情况是我们要点要观察的,单步执行此指令之后请注意SP寄存器的变化。 | |||||||||||||||||||||
-t | SP寄存器减量 | ||||||||||||||||||||
AX=1234 | BX=ABCD | CX=000A | DX=0000 | SP=FFEC | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0B01 | ES=0B01 | SS=0B01 | CS=0B01 | IP=0107 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0B01:0107 | 53 | PUSH BX | |||||||||||||||||||
这是第一次执行PUSH指令,可以观察到SP寄存器由原来的FFEE变成了FFEC,恰好是减了2。 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |