Mam taki kod:
mov eax , 1
mov ebx , 2
push eax
push ebx
call a
add esp , 8
jmp koniec
a:
push ebp //DO TEGO MIESJCA ROZUMIEM
mov ebp , esp
mov eax , [ ebp+8]
add eax , [ ebp+12]
pop ebp
ret
koniec:
Nie rozumiem jaką wartość ma EBP w instrukcji PUSH. Mógłby ktoś wyjaśnić czym jest i do czego służy EBP? Naczytałem się już o tym, ale dalej nic nie rozumiem :(
Drugie pytanie to, dlaczego na koniec w EAX znajduje się wartość 120:
mov eax , 5
push eax
dec eax
call silnia (liczy silnie dla argumentu ze stosu i zwraca wynik przez rejestr EBX)
add esp , 4
mov eax , ebx
Mi wychodzi 24:
Umieść 5 w EAX
Dodaj EAX na stos
Zmniejsz EAX o 1 czyli na stosie mamy 4.
Liczymy silnie dla 4 = 24
Zmniejszamy wskaźnik stosu
Umieszczamy EBX (czyli wartość 24) w EAX.
Gdzie robię błąd?