2
C 버전 :이해 ATT 어셈블리 언어
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 어셈블리 버전 %의 EBP에서 %의 EBP + 12, Z에서의 %의 EBP + 8, Y에
X + 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과 같은지입니다.
왼쪽으로 4 자리 씩 이동하면 본질적으로 16이 곱 해집니다. –