假设将[1000:0,1000:f]作为栈段,大小为16字节,请耐心看完如下在debug中的运行过程:
********************************************************************************
-r(寄存器及内存初始情况)
AX=1234 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=1000 CS=0B46 IP=0100 NV UP EI PL NZ NA PO NC
0B46:0100 50 PUSH AX
-d ss:0 1f
1000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t(第一次执行PUSH AX)
AX=1234 BX=0000 CX=0000 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=1000 CS=0B46 IP=0101 NV UP EI PL NZ NA PO NC
0B46:0101 50 PUSH AX
-d ss:0 1f
1000:0000 00 00 00 00 34 12 00 00-01 01 46 0B AA 05 34 12 ....4.....F...4.
1000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t(第二次执行PUSH AX)
AX=1234 BX=0000 CX=0000 DX=0000 SP=000C BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=1000 CS=0B46 IP=0102 NV UP EI PL NZ NA PO NC
0B46:0102 50 PUSH AX
-d ss:0 1f
1000:0000 00 00 34 12 00 00 02 01-46 0B AA 05 34 12 34 12 ..4.....F...4.4.
1000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t(第三次执行PUSH AX)
AX=1234 BX=0000 CX=0000 DX=0000 SP=000A BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=1000 CS=0B46 IP=0103 NV UP EI PL NZ NA PO NC
0B46:0103 50 PUSH AX
-d ss:0 1f
1000:0000 34 12 00 00 03 01 46 0B-AA 05 34 12 34 12 34 12 4.....F...4.4.4.
1000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t(第四次执行PUSH AX)
AX=1234 BX=0000 CX=0000 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=1000 CS=0B46 IP=0104 NV UP EI PL NZ NA PO NC
0B46:0104 92 XCHG DX,AX
-d ss:0 1f
1000:0000 00 00 04 01 46 0B AA 05-34 12 34 12 34 12 34 12 ....F...4.4.4.4.
1000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
********************************************************************************
问题:
在第一次做完"push ax"操作后,内存段[1000:4,1000:d]的内容也被修改为“34 12 00 00-01 01 46 0B AA 05”,且之后每次入栈操作都会把这段数据往内存的低地址位移动,而且这段数据中有一个字节数据还会被修改(好像是在计数),请问这是为什么呢? |