.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
.Понимание сборки, сгенерированной вызовом функции C
Может кто-нибудь объяснить (с точки зрения добавления и умножения в calc.c
), что происходит, по строкам?
Исходный код С:
int calc(int x, int y, int z)
{
return 3*x + 2*y + 15*z;
}
Вы создали неиспользуемый вложенную функцию, которая была оптимизирована так, это не в списке сборок. Удалите функцию «main» и повторите попытку. – Jester
Возможно, у вас есть опечатка '.global calc' – silentboy
Извините. Я исправил код. (сборка и c) –