我正在学习汇编,想知道当你弹出一个空堆栈或在它已经是 FFFE 时增加 SP(堆栈指针)时会发生什么:
seg1 segment
org 100h
pop ax
mov ah,4ch
int 21h
seg1 ends
当我通过调试器运行程序时,我看到执行 pop 命令后 SP 将指向 SP = 0000。为什么SP指向0000?是不是因为内存中的最大SP是FFFF,所以就循环到第一个点? (我知道SP只会增加或减少2,因为push和pop总是2字节) 当命令执行时,程序会在 SP = 0000 处弹出任何内容吗?
我正在使用 86 宏汇编器 Oracle VM VirtualBox。 谢谢。
最佳答案
这种效果称为“环绕”。 FFFE 加 2 就是 10000,但是第一位被去掉了,所以结果是 0000。
这对于有符号操作来说非常有用:FFFE 相当于 -2。 -2 + 2 = 0。
是的,下一个 pop
将加载 SS:0000 处的值并递增 SP,而 push
也会导致环绕并在 SS 处存储值: FFFE。
关于程序集弹出空堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943666/