当定义一个64KB的栈的时候,SP的值是0。PUSH的话,会从FFFE开始写入。
那如果在没有入栈的情况下,直接POP会出现什么情况?我试验了一下。
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
-e 2000:0 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
-d 2000:0 f
2000:0000 11 22 33 44 55 66 77 88-99 AA BB CC DD EE FF 00
-a
0C1E:0100 mov ax,2000
0C1E:0103 mov ss,ax
0C1E:0105 mov sp,0
0C1E:0108 pop ax
运行以后的结果是这样的::
-t
AX=2000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1E ES=0C1E SS=0C1E CS=0C1E IP=0103 NV UP EI PL NZ NA PO NC
0C1E:0103 8ED0 MOV SS,AX
-t
AX=2000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0C1E ES=0C1E SS=2000 CS=0C1E IP=0108 NV UP EI PL NZ NA PO NC
0C1E:0108 58 POP AX
-t
AX=2211 BX=0000 CX=0000 DX=0000 SP=0002 BP=0000 SI=0000 DI=0000
DS=0C1E ES=0C1E SS=2000 CS=0C1E IP=0109 NV UP EI PL NZ NA PO NC
0C1E:0109 98 CBW
-d 2000:0 f
2000:0000 82 06 33 44 55 66 77 88-99 AA BB CC DD EE FF 00
先前定义的栈的20000和200001两个单位确实被读到AX中。可是那个0682是怎么来的呢。我实验了三次,都是这样结果。这是什么啥呢? |