Procedures
Stack Frame Structure

- procedure P(caller) 가 Q(callee)를 부르는 상황일 때
- Q에 들어가는 argument들이 P의 stack에 갖고 있게 됨
- 그리고 Q를 부를 때, P에 돌아와야 하는 return address를 Callers’ frame 제일 위에 넣게 됨
- Q의 stack frame은 frame pointer를 저장한 값(copy of register %ebp)로부터 시작하게 되고
- 다른 저장한 register 값들의 복사본이 그 뒤를 따라오게 됨
- procedure Q는 register에 저장될 수 없는 지역 변수들을 위해 stack을 활용하게 됨
- local data를 다 보유하기에는 register가 충분치 않음
- 지역변수 중 일부는 배열 or 구조체여서 array, structure reference로 접근되어야 하기 때문
Transferring Control

- %eip 는 program counter(PC)가 갖고 있는 주소
- %esp 는 stack의 top 주소
- main function 에서 함수를 call 하기 직전 — (a)
- 여기서 %eip는 함수 call 하기 직전 line
- main 에서 함수 call — (b)
- Stack에 돌아와야 할 return의 주소값(call하고 난 다음 line — 0x080483e1) push
- 그 함수 내부의 첫째 줄 주소를 PC(%eip — 0x08048394)에 set
- 함수 내부에서 return 보일 때까지 진행
- 함수 다 끝나고 나서 main으로 돌아오기 — (c)
- stack 에서 pop(돌아가야 할 주소 — 0x080483e1)
- 그 주소로 jump & main 함수 계속 진행