꺄뜨르 2011. 5. 21. 22:08

1. call and return
  - 서브프로그램은 call 명령어에 의해 불려지고 ret를 통해 복귀한다
2. parameter passing
  - 파라메터들은 부르는 쪽에서 push 해놓는다
  - 서브프로그램 안에서 파라메터들은 ebp를 이용하여 접근한다
  - 파라메터들은 부르는 쪽에서 삭제한다
3. local variables
  - 지역 변수들은 스택에 할당
  - 지역 변수들도 ebp로 접근한다
4. return value is passed via eax register
  - 리턴 값 들은 eax 레지스터를 통해 전달한다

파라메터 입력시
i = func(1, 2); 의 경우
push dword 2 ; 2nd parameter
push dword 1 ; 1st parameter
call func ; call subprogram
add esp, 8 ; remove parameters
뒤에부터 push

지역 변수 입력시
int a, b, c;
sub esp, 12
ebp - 4 = a
ebp - 8 = b
ebp - 12 = c
이런식으로 그냥 순서대로 push