Gcc shrl vs sarl。。x86汇编gnu

Gcc shrl vs sarl。。x86汇编gnu,gcc,assembly,x86,gnu,bit-shift,Gcc,Assembly,X86,Gnu,Bit Shift,我正在用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是相同的,所以'sarl1,%eax'=eax/(2^1)。 是这样吗?如果是这样,leal做什么 假设sarl 1,%eax真的应该是sarl$1,%

我正在用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是相同的,所以'sarl1,%eax'=eax/(2^1)。
是这样吗?如果是这样,leal做什么

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

x = ((unsigned int) x) >> 20;
y = (x + y) >> 1
leal
指令的意思是:
eax=eax+edx
。这可能对您也很有用