/*
* push与pop
*/
1.栈是向下增长的,因此栈顶元素的地址是所有栈中元素地址中最低的。
2.%rsp保存着栈顶元素的地址。
3.push和pop同样有pushq,pushl,pushw,pushb等操作。
4.pushq时,先将栈顶指针减8,再将值写到新栈顶地址,
pushq %rbp
等价于:
subq $8,%rsp (下一章讲述这个指令)
movq %rbp,(%rsp)
这两种操作的区别是机器代码中pushq指令编码占1字节,而上面两条指令加起来需要8字节。
5.类似地,popq会把栈顶的值读出数据,然后再将栈指针+8,注意此时原先栈顶的内容是不变的(虽然栈顶指针已经不指向它了)。
/*
* push
*/
入栈,esp - 4
/*
* pop
*/
出栈,esp + 4