어셈블러 코드를 이해하기위한 간단한 코드를 작성했습니다. 다음과 같습니다.메서드 호출 후 EBP 포인터 사용
int sum(int a, int b){
int res = a+b;
}
그리고 sum-function을 호출합니다. 그래서, 나는이 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 함수의 참여). 나는 그것에 대해 두 가지 질문을 가지고있다 : sum 매개 변수의 값, 예를 들어 sum (5,4)가 ebp + 12와 ebp + 8에서 스트로크되고 ebp-4에서 결과가 왜 생겨나는 이유가 있는가? 왜 우리가 그걸합니까? 항상 같거나 무작위로 선택합니까?
둘째, 우리가 가지고있는 부분 : 우리가 EAX 먼저 EBP-4 다음 결과를 할 이유
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
우리가 기능을 중단 전에 다시? 이유가 있습니까?
당신에게 확답을 줄 수 있기를, 그리고 당신이 사용하고있는 컴파일러에게하도록 요청하고 싶습니다 하나가있다. – Rastikan
어떤 OS와 어떤 컴파일러입니까? – nrz
함수를'int'로 선언했지만 아무 것도 반환하지 않았습니다. –