스택 프레임: 함수가 호출될 떄 할당되는 스택 영역
리턴 정보
로컬 저장소 (필요하면 씀): 함수 내에서 선언된 지역변수 저장
임시 공간 (필요하면 씀): 계산 중간값, 최적화를 위한 임시 데이터, 반환값 등
%rbp: 스택 프레임의 끝 주소 저장
(%rbp ~ %rsp사이가 현재의 스택 프레임)
만약 레지스터가 모자르다면 여기에 값 저장하기도 한다.
레지스터 저장 규칙
- caller saved: 호출하는 쪽에서 값을 저장할 의무
caller는 콜하기 전 그 스택 프레임에 임시값 저장, 이후 callee가 복귀하면 임시값 복원
%rax, %rdi, %rsi... 등이 caller saved 레지스터 - callee saved
callee는 함수 실행 전 프레임에 임시 값 저장 후 caller로 복귀 전 값 복원 후 return
%rbs, %r12..., %rbp, %rsp... 등이 callee saved 레지스터
재귀함수: 자기 자신을 호출하는 함수
caller보다 callee가 먼저 반환함
예시) 피보나치 수열 재귀함수
rbp, rsp도 함수가 호출될 때마다 바뀜
- 호출될 때: rbp(new)는 rbp(old)가 저장된 스택의 주소를 가리키고, rsp는 언제나 스택의 맨 끝을 가리킨다.
- 반환될 때: pop을 이용하며 rsp값은 rbp(new)로 바뀌고, rbp(new)값은 rbp(old의 값으로 바뀐다)
728x90
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조 번외](1)[어셈블리 문제 풀어보기 1] (1) | 2025.01.29 |
---|---|
[컴퓨터 구조](16)[어셈블리어 7] (0) | 2025.01.28 |
[컴퓨터 구조](14)[어셈블리어 5] (1) | 2025.01.24 |
[컴퓨터 구조](13)[어셈블리어 4] (0) | 2025.01.23 |
[컴퓨터 구조](12)[어셈블리어 3] (0) | 2025.01.22 |