그라운드 임베디드 EN 유튜브 구독

노트 / 기계어와 어셈블리

레지스터와 호출 규약

인자는 r0~r3, 반환값은 r0, 돌아갈 주소는 lr, 스택 위치는 sp. 함수 경계에서 레지스터가 어떻게 쓰이는지 정한 약속.

GROUND EMBEDDED · 정리 노트기계어 03레지스터와 호출 규약레지스터역할r0~r3인자 전달, 반환값(r0), 함수 안에…r4~r11함수가 쓰려면 저장했다가 복원해야 함

Cortex-M 레지스터

r0 ~ r3인자, 반환값r4 ~ r11함수가 보존r12SP스택 위치LR돌아갈 주소PC지금 실행 위치
Cortex-M의 레지스터. 뒤의 셋은 정해진 역할이 있습니다.
레지스터 역할
r0~r3 인자 전달, 반환값(r0), 함수 안에서 자유롭게 씀
r4~r11 함수가 쓰려면 저장했다가 복원해야 함
r12 임시
r13 (sp) 스택 포인터
r14 (lr) 돌아갈 주소
r15 (pc) 프로그램 카운터
xPSR 플래그와 예외 번호

AAPCS 호출 규약

인자 넷까지r0 ~ r3로 전달다섯째부터스택으로반환값r0돌아갈 주소LR
함수 호출 때의 약속.
  • 인자 4개까지는 r0~r3, 다섯 번째부터는 스택으로
  • 64비트 값은 r0:r1처럼 두 레지스터를 씀
  • 호출된 함수는 r4~r11을 쓰면 시작할 때 push, 끝날 때 pop

그래서 인자를 4개 이하로 유지하면 스택 접근이 줄어 빨라집니다. 인자가 많으면 구조체 포인터 하나로 넘기는 것이 낫습니다.

인터럽트와의 관계

Cortex-M은 예외에 들어갈 때 r0~r3, r12, lr, pc, xPSR을 하드웨어가 자동으로 저장합니다. 호출 규약상 "호출된 쪽이 보존할 필요 없는" 레지스터를 미리 저장해 두기 때문에, 인터럽트 처리 함수를 평범한 C 함수로 쓸 수 있습니다.

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →