我无法理解这是做什么的:
shr [ebp + 8], 1
我知道它将位移到右边,但是ebp + 8
做什么和/或定位是什么?
答案 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相同。