我正在将一部分x86汇编代码翻译成C代码。其中的一个小节给我带来了麻烦。
mov %eax, %edx
sar $0x1f, %edx
idivl -0x18(%ebp)
mov %edx, %eax
我们的eax值一开始是0。然后我们通过0x1f(31)进行了移位和旋转。我知道右移相当于除以2,如果您将其移位并旋转到一个数字,会发生什么?它也是/2吗?然后,我们通过space -0x18(%ebp)处的元素进行除法,我们将其称为int x。或者idivl起作用方式不同吗?然后我们将其放回%eax寄存器中,接下来程序很容易理解。
如果需要帮助,请告诉我,我不理解的主要问题是sar指令。
sar
不是算术右移吗? - Jason Bakersar $0x1f, %edx
等同于将$0x1f
除以2,重复%edx
次,并向负无穷方向舍入。如果您使用的是GAs语法,则相同操作中的数字会被翻转:将%edx
除以2$0x1f
次。 - Jason Baker