Architecture] MIPS Procedure Call
MIPS에서의 함수 호출
- 함수 호출 명령은 Parameter(Argument, 매개변수)를 인터페이스로 하는 명령이다.
- 함수와 함수끼리 제어권을 넘기는 것은 PC값이 변경되어 실행할 명령어의 위치가 변경됨을 의미한다.
- 어셈블리 언어에서 함수를 호출한 후, 값을 리턴받고 제어권을 넘겨받는 개략적인 과정은 아래와 같다.
(Caller는 다른 함수를 호출하는 주체가 되는 함수이며, Callee는 호출되는 함수이다.)
1. Callee가 접근 가능한 메모리 위치에 매개변수들을 위치시킨다.
2. Caller가 Callee에게 제어권을 넘긴다. (PC값이 Callee의 명령어를 가리키게 된다.)
3. Callee가 연산을 수행하기 위한 메모리 공간을 확보한다.
4. Callee의 구현 내용에 따른 실질적인 연산을 수행한다.
5. 결과값(리턴값)을 Caller가 접근 가능한 메모리 위치에 위치시킨다.
6. Callee가 Caller에게 제어권을 넘긴다. (PC값이 Callee를 호출했던 부분 바로 다음의 명령어를 가리키게 된다.)
Register for Procedure (함수 호출을 위한 레지스터)
\(\texttt{$a0 - $a3}\)
- 매개변수 데이터를 저장하는 레지스터
\(\texttt{$v0 - $v1}\)
- 리턴값을 저장하는 레지스터
\(\texttt{ra}\)
- 제어 권한을 넘길 때 이용되는 레지스터
- 변경할 PC값을 저장한다.
이미지 출처 : 권건우 교수님 강의록