Instructions: Language of the Computer - 3


function과 procedure은 같나? 정확히는 다르다.
인자로인한 레지스터의 사용

Procedure call 명령어
jal : 절차 호출(함수진입하는 것을 생각)
jalr : 절차 반환(함수진입했다가 나와서 다시 메인 함수로 돌아오는 것을 생각)
왜 callee에서는 jal을 사용하지 못할까? label의 이름이 다르게 설정해줘야해서

함수호출에 있어서 메모리 공간
Procedure은 로컬변수에 대한 자체 메모리 공간이 필요함
그렇다면 어떻게 하는게 좋을까?
고정된 주소값을 함수 각각에 할당해줌?
해결책은 “동적할당”


stack pointer (스택에 접근하고 관리하는 방법)

스택이 아래로 growing하기 때문에 다음과 같이 관리해줌


Caller - Callee 사용하는 레지스터

레지스터값 저장해두기
caller에서 x5를 선언하고 callee에서 x5를 갱신해주면, 호출을 빠져나와서 caller에서 x5를 다시 사용하게 될 때 갱신된 값으로 사용이 된다. → 혼란스러움 → 갱신 안되도록 막자
해결책


leaf procedure
호출을 당하기만하는 함수 (다른 함수를 호출x)

non-leaf procedure


synchronization

→ 먼저쓰는 사람이 임자임~
