28

在我正在分析的反汇编程序中,我找到了命令

sar %eax

这是做什么的?我知道sar使用两个参数执行右移,但我无法找到仅使用一个参数的含义。

该程序是为 Intel x86 处理器编译的。

4

2 回答 2

29

看起来反编译器使用了速记,SAR EAX,1其操作码为0xD1F8. 当立即数不是 1 时,也就是SAR EAX,xx操作码是0xC1F8 xx,请参阅 Intel 指令参考,卷。2B,4-353。

于 2012-10-10T07:29:35.557 回答
6

当只有一个操作数时,隐含的移位为 1。

所以....

SAR %EAX暗示签署%EAX >> 1

因此,

SAR %eax = SAR $1, %eax

我已经成功地证明了这一点,分析了 GDB 中的一些代码。

于 2017-10-07T22:42:23.970 回答