内联汇编代码,什么是ebp?

时间:2014-04-14 07:59:19

标签: assembly x86

我无法理解这是做什么的:

shr [ebp + 8], 1

我知道它将位移到右边,但是ebp + 8做什么和/或定位是什么?

2 个答案:

答案 0 :(得分:5)

EBP是堆栈基指针。通常当你看到类似ebp + 8的东西时会引用局部变量或函数参数。通常,参数具有来自ebp的正偏移量,而局部变量具有负偏移量。

我建议你阅读Matt Pietrek的MSDN文章:Matt's Just Enough Assembly Language to Get By

答案 1 :(得分:1)

它意味着位于EBP+8的任何地方(因此内存比EBP高8个字节)。通常,EBP是函数开头的堆栈指针[又名"帧指针",指向"当前堆栈帧]的副本,但它是只是另一个寄存器,所以它可能包含任何东西。实际上,依赖具有特定值的EBP的代码通常是一件坏事。

当使用EBP作为帧指针时,正偏移意味着参数,负偏移意味着局部变量(当它们进入堆栈"上面" [堆栈增长到地址零]参数) - 你还必须在函数开始时考虑EBP本身的保存[因为我们需要在返回之前恢复它,所以调用函数得到它EBP to" normal"]和返回地址,因此EBP+8通常意味着函数的第一个参数。

shr是右移,在这种情况下是1,所以与除以2相同。