python进行网站开发,遵义哪里做网站,wordpress获取当前页面链接地址,前端页面设计流程bp与sp#xff08;压栈和弹栈#xff09;
在计算机内部的寄存器组中#xff0c;有一对寄存器非常有意思#xff1a;%ebp#xff0c;%esp 文章目录 bp与sp#xff08;压栈和弹栈#xff09;寄存器组示例图%ebp与%esp总结 寄存器组示例图
首先我们应该对于计算机中的寄存…bp与sp压栈和弹栈
在计算机内部的寄存器组中有一对寄存器非常有意思%ebp%esp 文章目录 bp与sp压栈和弹栈寄存器组示例图%ebp与%esp总结 寄存器组示例图
首先我们应该对于计算机中的寄存器组有一个逻辑的认知 以X86_64为例对其中的通用寄存器组做出了逻辑图示如下链接 X86_64寄存器组图示 %ebp与%esp
这个寄存器叫做堆栈基址寄存器被调用者保存而其保存的内容则是调用者的栈底。
比如下方的一段代码
#includestdio.hvoid A(int n){printf(n%d\n,n);
}void B(){int a1;A(a);
}int main()
{B();
}对于上述代码执行时的栈 首先忽略系统区main函数在栈底然后在main函数中把B函数入栈由于B中调用了A在B之后又将A入栈。其中%ebx就始终指向一个函数的栈区的底部。而%esp则始终指向函数栈区的顶部这里简称为栈顶。
指令效果描述pushq SR[%rsp]-R[%rsp]-8M[R[%rsp]]-S将四字压入栈popq DD-M[R[%rsp]]R[%rsp]-R[%rsp]8将四字弹出栈
总结
总之这块很简单只需记住 压栈先挪出空间(sp减去某个值)再填数据 弹栈先保存要弹出的数据再释放空间(sp加上某个值) 值得注意的是弹栈后原数据还在只是不再被栈顶指针所指而是等待着下一次数据的覆盖