信徒 发表于 2012-6-3 02:13:04

为什么(mov sp,2)在单步调试中会跳过

不知道为啥,我上传不了图片..
转入正题
0B25:0125 BC0200      MOV   SP,0002
0B25:0128 B86622      MOV   AX,2266
0B25:012B 50            PUSH    AX
0B25:012C 803E0C9801    CMP   BYTE PTR ,01
0B25:0131 7503          JNZ   0136
0B25:0133 E823E1      CALL    E259
0B25:0136 E85C01      CALL    0295
0B25:0139 AC            LODSB
0B25:013A E85801      CALL    0295
-t

AX=0000BX=8833CX=8833DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1000ES=0B25SS=1000CS=0B25IP=0120   NV UP DI NG NZ AC PO NC
0B25:0120 B80010      MOV   AX,1000
-t

AX=1000BX=8833CX=8833DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1000ES=0B25SS=1000CS=0B25IP=0123   NV UP DI NG NZ AC PO NC
0B25:0123 8ED0          MOV   SS,AX
-t

AX=1000BX=8833CX=8833DX=0000SP=0002BP=0000SI=0000DI=0000
DS=1000ES=0B25SS=1000CS=0B25IP=0128   NV UP DI NG NZ AC PO NC
0B25:0128 B86622      MOV   AX,2266


就是我在debug单步调试时发现, 0B25:0125 BC0200      MOV   SP,0002,会被跳过,这是怎么回事呢

hxs554f 发表于 2012-6-3 07:27:15

ss:sp联合指向栈顶,cpu对其设置是连续的。因此在执行完设置ss的指令后,cpu不会响应中断而直接执行下一条语句。debug的t命令是一种中断,执行完MOV SS,AX后cpu不响应单步中断,执行下一条MOV   SP,0002,所以不会显示,但实际上还是执行了,并不是跳过。

信徒 发表于 2012-6-3 08:25:34

谢谢,好人半路捡到钱{:5_90:}

信徒 发表于 2012-6-3 08:26:06

hxs554f 发表于 2012-6-3 07:27 static/image/common/back.gif
ss:sp联合指向栈顶,cpu对其设置是连续的。因此在执行完设置ss的指令后,cpu不会响应中断而直接执行下一条语 ...

谢谢,好人半路捡到钱{:5_90:}
页: [1]
查看完整版本: 为什么(mov sp,2)在单步调试中会跳过