Cバージョン:
int arith(int x, int y, int z)
{
int t1 = x+y;
int t2 = z*48;
int t3 = t1 & 0xFFFF;
int t4 = t2 * t3;
return t4;
}
同じプログラムのATTアセンブリバージョン:
xは%ebp + 8、yは%ebp + 12、zは%ebp + 16
movl 16(ebp), %eax
leal (%eax, %eax, 2), %eax
sall $4, %eax // t2 = z* 48... This is where I get confused
movl 12(%ebp), %edx
addl 8(%ebp), %edx
andl $65535, %edx
imull %edx, %eax
左シフト以外のプログラムのすべてのポイントでそれが行っていることをすべて理解しています。
左に4回シフトすると思います。何故ですか?
ありがとうございました!
編集:私が混乱している部分は、Cバージョンのz*48部分と同等であることも理解しています。
私が理解していないのは、左に4回シフトすることがz*48にどのように等しいかということです。