함수는 추상화의 결과다 - CS:APP 3.7 프로시저 호출

2025. 4. 8. 22:10·CS:APP

프로시저 호출은 사람에게 익숙한 여러 모습 ‘함수, 메서드, 서브루틴, 핸들러 등’으로 추상화되어 구현되지만, 기계어 수준에서는 처리해야 할 여러 과정이 있다.

예를 들어 프로시저 P가 프로시저 Q를 호출하고, Q가 실행한 후 다시 P로 리턴을 예로

  1. 제어권 전달 (Passing Control) : 프로그램 흐름이 바뀌는 순간
    1. 호출한 P는 call Q를 실행
    2. CPU는 현재 위치 바로 다음 주소를 리턴 주소(return address)로 스택에 push
    3. Q의 첫 번째 명령어 주소로 점프

    [Q 종료 후]
    1. ret 명령어가 스택에서 return address를 꺼내고 점프
    2. 다시 P로 복귀

즉, call / ret는 Jump를 수행하지만, 실제로는 리턴 주소를 저장하고 복구 하는 기능을 수행


  1. 데이터 전달 (Passing Data) : 이 함수에게 뭘 줄지, 결과는 어딨는지?
    1. 레지스터를 통해 인자 전달 (%rdi, %rsi, %rdx, %rcx, %r8, %r9)
    2. 인자가 많으면, 스택에 push
    3. 반환값은 %rax 에 담아 반환
long add(long x, long y); // x → %rdi, y → %rsi, 반환값 → %rax

  1. 메모리 할당과 반납 (Memory allocation) : 함수만의 공간 부여(스택 프레임)
    1. 함수 시작 시:
      1. 지역 변수 공간 확보 : subq, $imm, %rsp
      2. 가끔 레지스터 백업도 함께 push
    2. 함수 종료 시:
      1. 메모리 해제 : addq $imm, %rsp 또는 leave
      2. ret로 복귀
기능 수행하는 명령어
함수 호출 call
복귀 ret
인자 전달 %rdi, %rsi, … or stack
반환값 %rax
지역 변수 메모리 확보 subq $imm, %rsp
해제 addq $imm, %rsp or leave
728x90

'CS:APP' 카테고리의 다른 글

ELF, Executable and Linkable Format (재배치 가능 목적파일)  (0) 2025.08.08
컴파일러 드라이버  (0) 2025.08.04
스택은 사실 아래로 자란다(push,pop) - CS:APP 3.4.4  (0) 2025.04.07
[C, Assembly] movq 예제  (0) 2025.04.07
mov 인스트럭션 - CS:APP 3.4.2  (0) 2025.04.07
'CS:APP' 카테고리의 다른 글
  • ELF, Executable and Linkable Format (재배치 가능 목적파일)
  • 컴파일러 드라이버
  • 스택은 사실 아래로 자란다(push,pop) - CS:APP 3.4.4
  • [C, Assembly] movq 예제
ahpicl64
ahpicl64
in the clouds
  • ahpicl64
    구름
    ahpicl64
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • WIL (4)
      • Jungle (36)
      • AWS (2)
      • SQL (2)
      • CS:APP (17)
      • Algorithm (10)
      • K8s (7)
      • 자료 구조 (10)
      • Spring (4)
      • React (0)
      • 운영체제 (1)
      • 기타등등 (2)
      • 이야기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    EC2
    컴퓨터시스템
    queue
    IAM
    github actions
    알고리즘
    AWS
    CloudFront
    자료구조
    어셈블리
    부하테스트
    python
    Spring boot
    Spring
    트러블슈팅
    k8s
    S3
    CSAPP
    DevOps
    DB
  • 02-21 06:16
  • hELLO· Designed By정상우.v4.10.3
ahpicl64
함수는 추상화의 결과다 - CS:APP 3.7 프로시저 호출
상단으로

티스토리툴바