코드네임 :
🖥️ 컴퓨터구조 - 함수의 호출 본문
[ Stack Pointer ]
"Set Up" code : stack pointer를 지정해주는 코드
- 즉 content들이 저장되기 위해 할당되는 공간(repository 등)에 관한 코드
"Finish" code : return시 할당을 해제
sp : 스텍 포인터
- 현재 스텍의 가장 위, 즉 가장 마지막에 추가된 데이터를 의미
- 스텍에 데이터가 어디까지 쌓여있나를 의미함
fp : 선택적 프레임 포인터
- 현재 실행 중인 함수의 프레임 시작점을 나타냄
- 프레임은 함수의 호출 정보와 지역 변수 등을 포함하는 스택 내의 영역을 말함
- 프레임 포인터는 이 영역의 베이스 주소를 가리킴
- 함수가 종료될 때 fp를 사용하여 스택을 정리하고 이전 프레임으로 돌아갑
[ 레지스터 저장 규칙 ]
"Caller saved" registers (호출하는 함수에 저장)
- 호출하는 함수(caller)가 값을 저장 ( 호출 당한 함수(callee)에서 저장할 필요가 없다는 의미 )
- RISC-V에서 a0~a7, t0~t6 ( x10~x17, x5~x7, x28~x31 ) 레지스터가 이에 해당
"Callee saved" registers (호출된 함수에 저장)
- 호출된 함수는 이 레지스터들에 임시 값들을 저장하고, 호출자(caller)에게 돌아가기 전에 이를 복원
-RISC-V에서는 s0~s11 ( x8~ x9, x18~ x27 ) 레지스터가 이에 해당
Register saving convention 때문에 stack 사용 최소화 가능
[ Non-Leaf Procedures ]
- 기본적으로 Leaf Procedures과 동일 ( Leaf는 다른 함수를 호출하지 않는 함수 - 즉 return 주소를 스텍에 저장할 필요 x) )
- 다른 함수를 호출하는 함수
- nested call(중첩호출) 인 경우, return 값과 인자 및 지역변수(local variables)를 스텍에 저장해놔야 함
- 호출 이후 stack으로 부터 restore한다
'⚙️Computer System > 컴퓨터구조' 카테고리의 다른 글
🖥️ 컴퓨터구조 - RISC-V format instructions (기말 여부터) (0) | 2024.04.28 |
---|---|
🖥️ 컴퓨터구조 - C code to RISC-V assembly (0) | 2024.04.13 |
🖥️컴퓨터구조 과제 2 📚 (0) | 2024.04.05 |
🖥️ 컴퓨터구조 RISC-V (0) | 2024.03.25 |
🖥️ 컴퓨터구조 Floating Points 부동소수점 (0) | 2024.03.19 |