shrl vs sarl .. x86汇编gnu

toi*_*ine 4 x86 assembly gcc gnu bit-shift

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

shrl $20, %edx
leal (%edx,%eax), %eax
sarl 1, %eax 
Run Code Online (Sandbox Code Playgroud)

假设变量X位于edx寄存器中,Y位于eax且两者都是(32位int).这里发生了什么??

我知道'shrl $ 20,%edx'正在将%eax转移到20位,所以与:eax /(2 ^ 20)相同然后sarl是相同的所以'sarl 1,%eax'= eax /(2 ^ 1 ).是的,如果是的话,勒尔做了什么?

Joh*_*ter 10

假设sarl 1, %eax确实应该是sarl $1, %eax,那么整个事情等同于:

x = ((unsigned int) x) >> 20;
y = (x + y) >> 1
Run Code Online (Sandbox Code Playgroud)

leal指令是指:eax = eax + edx.此链接可能对你有用,还有这一个.