以下のC言語のコードをアセンブリ言語に変換したいのですが、なぜ算術右シフトをする際に %cl
となるのかどなたか教えていただけないでしょうか
C言語版
void shift(int x, int y){
x <<= 2;
x >>= y;
return x;
}
アセンブリ言語版(xは%ebp+8、yは$ebp+12に格納されているとする)
movl 8(%ebp), %eax
shll $2, %eax
movl 12(%ebp), %ecx
sarl %cl, %eax /*ここで%ecx, %eaxでは駄目なのか?*/