AX=2000 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=1375 ES=1375 SS=2000 CS=1375 IP=0108 NV UP EI PL NZ NA PO NC
1375:0108 B82331 MOV AX,3123
-d2000:0 f
2000:0000 00 00 00 00 00 00 00 20-00 00 08 01 75 13 D9 0D ....... ....u...
看了论坛的一些解答 了解用T命令单步执行会产生中断,CPU先将标志寄存器(0DD9)进栈,再把cs(1375)和ip(0108)进栈。继续执行:
-t
AX=3123 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=1375 ES=1375 SS=2000 CS=1375 IP=010B NV UP EI PL NZ NA PO NC
1375:010B 50 PUSH AX
-d2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0B 01 75 13 D9 0D ......#1....u...
T单步执行的是 MOV AX,3123 。为什么栈段中的20-00会变成23 31(AX的内容)?继续执行:
-t
AX=3123 BX=0000 CX=0000 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=1375 ES=1375 SS=2000 CS=1375 IP=010C NV UP EI PL NZ NA PO NC
1375:010C B86633 MOV AX,3366
-d2000:0 f
2000:0000 00 00 00 00 23 31 00 00-0C 01 75 13 D9 0D 23 31 ......#1....u...
T单步执行的是 PUSH AX 。吧AX(3123)压入栈中,为什么不覆盖D9 0D呢?好像是栈中内容全部向低地址移2个字节。而CPU只是执行PUSH AX,计算机靠什么完成上诉如此负责的操作呢(个人认为)? |