assume cs:codesg,ss:stacksg
stacksg segment
a db 4 dup(0)
stacksg ends
codesg segment
start: mov ax,stacksg
mov ss,ax
mov sp,4
mov bp,0
push bp
pop bp
mov ax,4c00h
int 21h
codesg ends
end start
堆栈段中ss:[0]到ss:[3]中的初始化值为0,sp初始化值为4,bp=0,bp入栈出栈。程序完成后堆栈段中按道理应该仍为0值,为什么会出现如图的状况呢?
堆栈段中ss:[0]到ss:[3]为076B,01A3。这是怎么一回事呢?
书上讲:因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据。不过,中断过程使用当前栈空间存放cpu关键数据是什么意思?难道说cpu响应单步中断以后还改写栈空间内容,那么以后在栈空间中存储的内容都将被改写,谁还敢使用栈空间呢?