CS/컴퓨터 구조

[컴퓨터 구조](15)[어셈블리어 6]

황올뱀 2025. 1. 27. 18:59

스택 프레임: 함수가 호출될 떄 할당되는 스택 영역
리턴 정보
로컬 저장소 (필요하면 씀): 함수 내에서 선언된 지역변수 저장
임시 공간 (필요하면 씀): 계산 중간값, 최적화를 위한 임시 데이터, 반환값 등
%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
반응형