初学者问题。请各位大大帮帮忙。
请教高手
为什么下面这段代码在虚拟8086模式下会出错?
我用debug -t 单步执行到 pop ax 时,就出错了。
mov ax,2000h;
mov ss,ax
mov sp,0
add sp,4
pop ax
pop bx
改成这样就不会,为什么?
mov ax,2000h;
mov ss,ax
mov sp,4
NOP
pop ax
pop bx
[解决办法]
mov sp,0
add sp,4
try to -〉
mov sp,16
[解决办法]
我个人猜想:SP为0时会触发异常,这也是为什么程序的堆栈操作时时SP向低端扩展,以及在CPU保护模式下堆栈段属性ED=1(向低端扩展)的原因了,可能是想起到监控堆栈溢出的异常吧。