Gcc shrl vs sarl。。x86汇编gnu
我正在用gcc编译代码并查看程序集,这段代码到底在做什么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,%
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
。这可能对您也很有用