.file "calc.c"
.text
.globl calc
.type calc, @function
calc:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 16(%ebp), %ecx
leal (%edx,%edx,2), %edx
movl 12(%ebp), %eax
leal (%edx,%eax,2), %eax
movl %ecx, %edx
sall $4, %edx
subl %ecx, %edx
addl %edx, %eax
popl %ebp
ret
.size calc, .-calc
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits
我试图了解这个汇编代码发生了什么。我通过键入gcc -O1 -S calc.c
生成calc.s
程序集文件来创建它。
calc.c
有人可以逐行解释(根据 中的加法和乘法)发生了什么吗?
原始C代码是:
int calc(int x, int y, int z)
{
return 3*x + 2*y + 15*z;
}