Я написал простой код для понимания сборки. Это:Использование указателя EBP после вызова метода
int sum(int a, int b){
int res = a+b;
}
И в основной функции я вызываю функцию суммы. Так, и я получаю assemblercode (я только взять часть функции суммы здесь) 4
push ebp,
mov ebp, esp
sub esp, 16
mov eax, DWORD PTR[ebp + 12]
mov edx, DWORD PTR[ebp + 8]
add eax, edx
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
leave
и теперь на мои вопросы. У меня есть два вопроса: Во-первых, есть ли причина, по которой значения параметра суммы, например sum (5,4), занимаются в ebp + 12 и ebp + 8, а результат - в ebp-4? Почему мы это делаем? Всегда ли это то же самое или выбирается случайным образом?
Во-вторых, часть, в которой мы имеем:
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
почему мы делаем результат первого в EBP-4, а затем в EAX снова, прежде чем покинуть функцию? Есть ли причина?
Чтобы быть в состоянии дать вам однозначный ответ, и есть один, я хотел бы попросить вас, чтобы сказать, что компилятор вы используете. – Rastikan
Какая ОС и какой компилятор? – nrz
вы объявили функцию 'int', но ничего не вернули –