汇编语言:堆栈段中ss:[0]到ss:[3]中的初始化值为0,sp初始化值为4,程序完成后堆栈段中按道理应该仍为0值

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响应单步中断以后还改写栈空间内容,那么以后在栈空间中存储的内容都将被改写,谁还敢使用栈空间呢?

DEBUG 软件,单步调试时,也要使用应用程序的堆栈。

你设置的堆栈空间:DB 4。。。,才四个字节,仅仅够压栈两次。

你改成 4000 字节,再试试看。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答