int sarl_n(int x, char n){
x <<= 2;
x >>= n;
return x;
}
当我使用“gcc -m32 -S sarl_n.c”汇编时,它会发出以下代码:
.cfi_startproc
movl 4(%esp), %eax
movsbl 8(%esp), %ecx
sall $2, %eax
sarl %cl, %eax #This is the part which I don't understand
ret
.cfi_endproc
为什么gcc使用“迷你注册”%cl
而不是大注册%ecx
?
编辑:我使用O2选项来获得更短的汇编代码
答案 0 :(得分:12)
以下行(上一版本)的原因
sarl %cl, 8(%ebp) #This is the part which I don't understand
或(当前版本)
sarl %cl, %eax #This is the part which I don't understand
正在使用%cl
而不是%ecx
,SAR
操作码仅支持%cl
寄存器作为变量算术移位的输入({{1}时间)。
请参阅here,我引用:
%cl