【问题标题】:shrl vs sarl .. x86 Assembly gnushrl vs sarl .. x86 汇编 gnu
【发布时间】:2013-03-19 15:39:32
【问题描述】:

我正在用 gcc 编译我的代码并查看程序集,这段代码到底在做什么?

shrl $20, %edx
leal (%edx,%eax), %eax
sarl 1, %eax 

假设变量 X 在 edx 寄存器中,Y 在 eax 中,两者都是(32 位 int)。这是怎么回事??

我知道 'shrl $20, %edx' 将 %eax 右移 20 位,因此与:eax/(2^20) 相同 然后 sarl 是一样的,所以 'sarl 1, %eax' = eax/(2^1). 是这样吗?如果是这样,leal 有什么作用?

【问题讨论】:

    标签: gcc assembly x86 gnu bit-shift


    【解决方案1】:

    假设sarl 1, %eax 真的应该是sarl $1, %eax,那么整个事情就等于:

    x = ((unsigned int) x) >> 20;
    y = (x + y) >> 1
    

    leal 指令的意思是:eax = eax + edx。这个linkthis one 可能对你有用。

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 2015-05-10
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      相关资源
      最近更新 更多