【问题标题】:SAR command in X86 assembly with one parameter带有一个参数的 X86 程序集中的 SAR 命令
【发布时间】:2012-09-30 14:33:34
【问题描述】:

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

sar %eax

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

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

【问题讨论】:

    标签: assembly x86 disassembly


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    所以....

    SAR %EAX 表示已签名的%EAX >> 1

    因此,

    SAR %eax = SAR $1, %eax
    

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

    【讨论】:

    • 其他答案的哪一部分是错误的?它说 used short-hand for SAR EAX,1 。另一个答案将输出表示为英特尔语法而不是 AT&T,但答案似乎还可以。 x86 对 4 个移位指令有一个特殊的短编码,可以在没有第二个操作数的情况下使用,或者您可以将值 1 编码为第二个操作数,这是一个执行相同操作的更长指令。
    • 幸运的是gas 会将sar $1, %eax 优化为隐式的逐一操作码,因此如果您这样编写,您不会得到低效的代码。顺便说一句,还有rorrolrclrcr 以及shl(又名sal)、shrsar 的一种缩写形式.但不是shrd,这是后来添加的,只有 imm8/cl 版本。
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2014-02-08
    • 2012-02-05
    • 2013-06-08
    相关资源
    最近更新 更多