提问者:小点点

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


我很难理解这是做什么的:

shr [ebp + 8], 1

我知道它将位向右移动,但是ebp 8到底在做什么和/或定位?


共2个答案

匿名用户

EBP是堆栈基本指针。通常当你看到像ebp 8这样的东西时,它会引用局部变量或函数参数。通常参数具有ebp的正偏移量,而局部变量具有负偏移量。

我建议您阅读Matt Pietrek的MSDN文章:Matt的只是足够的汇编语言。

匿名用户

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

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

shr是右移,在本例中为1,因此与除以2相同。