gpt4 book ai didi

assembly - 什么是 ESP 和 EBP 寄存器?

转载 作者:行者123 更新时间:2023-12-03 08:23:27 28 4
gpt4 key购买 nike

我发现 ESP 寄存器是当前堆栈指针,而 EBP 是当前堆栈帧的基指针。但是,我不明白这些定义(我刚刚开始学习如何在汇编程序中编码)。

我的理解是 ESP 指向堆栈本身,而 EBP 指向堆栈 1 顶部的任何内容。但这些只是我的猜测,它们很可能是不正确的。否则,下面这样的语句是什么意思?

MOV EBP, ESP    

脚注 1:编者注:是的,这是不正确的。在标准术语中,“栈顶”是 ESP 指向的地方,即使它是栈帧中的最低地址。类似于向上增长的堆栈数据结构,即使 x86 上的调用堆栈(如大多数 ISA)向下增长。

最佳答案

esp 是堆栈指针,ebp 是/曾经是堆栈帧,因此当您进入函数时,ebp 可以在该点获得 esp 的副本,在此之前堆栈上的所有内容、返回地址、传入的参数等该函数的全局变量(局部变量)现在将在函数的持续时间内与堆栈帧指针保持静态距离。 esp 现在可以根据编译器的需要自由地四处游荡,并且可以在嵌套到其他函数时使用(每个函数都需要自然地保留 ebp)。

这是一种管理堆栈的懒惰方式。使编译器调试更容易,更容易理解编译器生成的代码,但会烧掉一个可能是通用的寄存器。

关于assembly - 什么是 ESP 和 EBP 寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com