我正在用 gcc 编译我的代码并查看程序集,这段代码到底在做什么?
shrl $20, %edx
leal (%edx,%eax), %eax
sarl 1, %eax
假设变量 X 在 edx 寄存器中,Y 在 eax 中,两者都是(32 位整数)。这里发生了什么??
我知道 'shrl $20, %edx' 将 %eax 向右移动 20 位,因此与:eax/(2^20) 相同,然后 sarl 相同,因此 'sarl 1, %eax' = eax/(2^1 )。是这样吗?如果是这样,leal 有什么作用?