带有一个参数的X86程序集中的SAR命令

Kev*_*ica 22 x86 assembly disassembly

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

sar %eax
Run Code Online (Sandbox Code Playgroud)

这是做什么的?我知道sar有两个参数执行右移,但我只能用一个参数找不到它的含义.

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

Nec*_*lis 26

看起来像诈骗者使用的SAR EAX,1是具有操作码的短手0xD1F8.如果立即数不是1,也就是SAR EAX,xx操作码0xC1F8 xx,请参阅英特尔指令参考,卷.2B,4-353.

  • 您可以在http://download.intel.com/products/processor/manual/325383.pdf找到参考手册. (2认同)

小智 5

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

所以....

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

因此,

SAR %eax = SAR $1, %eax
Run Code Online (Sandbox Code Playgroud)

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

  • 另一个答案的哪一部分是错误的?它说“用于 SAR EAX,1 的简写”。另一个答案将输出表示为 Intel 语法而不是 AT&T,但答案似乎没问题。x86 对 4 个移位指令有一个特殊的短编码,可以在没有第二个操作数的情况下使用,或者您可以将值 1 编码为第二个操作数,这是一条更长的指令,可以做同样的事情。 (3认同)