【发布时间】: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