코드네임 :

🖥️ 컴퓨터구조 - 함수의 호출 본문

⚙️Computer System/컴퓨터구조

🖥️ 컴퓨터구조 - 함수의 호출

비엔 Vien 2024. 4. 13. 12:54

[ 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~t6x10~x17, x5~x7, x28~x31 ) 레지스터가 이에 해당

 

"Callee saved" registers (호출된 함수에 저장)

- 호출된 함수는 이 레지스터들에 임시 값들을 저장하고, 호출자(caller)에게 돌아가기 전에 이를 복원

-RISC-V에서는 s0~s11x8~ x9, x18~ x27 ) 레지스터가 이에 해당

 

Register saving convention 때문에 stack 사용 최소화 가능


 

[ Non-Leaf Procedures ]

- 기본적으로 Leaf Procedures과 동일 ( Leaf는 다른 함수를 호출하지 않는 함수 - 즉 return 주소를 스텍에 저장할 필요 x) )

- 다른 함수를 호출하는 함수

- nested call(중첩호출) 인 경우, return 값과 인자 및 지역변수(local variables)를 스텍에 저장해놔야 함

- 호출 이후 stack으로 부터 restore한다