关于汇编语⾔中PUSH和POP指令的⼀个⼩结
最近刚刚开始学习,对于PUSH和POP指令有些疑惑,特意去⽹上查了资料,在此做⼀个总结。
PUSH和POP指令都是对ss段的操作,ss中存放的是段基址,sp指针存放的是偏移地址。注意⼊栈出栈操作都是以 字 为单位(也就是2字节,16位)。
下⾯贴⼏张⽐较详细的截图:
⾸先从下⾯这张图可以看出数据是由下向上⼊栈的,当执⾏PUSH指令是,sp指针先向上移位2,然后放⼊ax(两个字节),此时SS:SP指向新栈顶。
POP AX指令的执⾏过程如下图所⽰,先将SS:SP指向的内存单元处的数据送⼊ax中,然后sp向下移位2,指向新栈顶下⾯的单元。汇编指令有多少个
但这⾥有⼀点需要注意:
当执⾏完pop ax指令后,1000CH处的2266仍然存在,只不过它不在栈中!
这句话怎么理解呢,就是说数据出栈后在没有新的数据进栈前它在内存单元中的值没变,但你⼏乎⽆法常规读取。当下次执⾏PUSH指令是,此处原有的数据会被覆盖。(就好⽐已出栈的单元就像是已将离婚的男⼥,他们已经不受法律保护)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。