CPU(Arm core)는 명령어 실행 과정에 임시로 데이터를 저장할 필요가있다. 이런 데이터들을 빠르게 읽고 쓸 수 있는 일종의 메모리가 필요하다.
CPU 내부에 존재하는 이런 메모리를 레지스터라고한다.

Arm의 CPU(=Arm core) 내부에는 16개의 레지스터가 존재한다.
이 각각의 레지스터들은 몇 비트일까?
ARM의 CPU가 32bit 이므로 레지스터의 크기도 당연히 32bit 이다.
R0~R12 까지 총 13개의 레지스터는 범용 레지스터 (General Purpose Register) 이다.
R13 은 스택 포인터(SP) 이다.
(1) 개념
스택은 메모리(RAM)에 잡아놓은 임시 저장 공간이다
데이터를 넣고 빼는 규칙이 LIFO (Last In, First Out) 이다.
(2) 사용하는 경우
계산하다가 레지스터가 모자라거나 함수 호출 시 → r0~r12 값을 스택에 복사해둠 → 나중에 다시 꺼내씀
스택(Stack)의 현재 위치를 가리키는 레지스터
참고로, 가리킨다라는 표현은 주소를 저장한다라는 말과 동일하다.
(1) 스택의 현재 위치
스택에 데이터는 연속적으로 저장되는데,
그중 마지막에 저장된 데이터(스택의 맨 위)의 주소를 "현재 위치"라고 함
예를들어,
주소 값
0x2000_0010 빈 공간
0x2000_000C [ r0 값 ] ← SP (스택 현재 위치 = 맨 위)
0x2000_0008 [ r1 값 ]
0x2000_0004 [ r2 값 ]
0x2000_0000 [ r3 값 ]
이런 경우 스택의 현재 위치 = 0x2000_000C 이고, SP에는 0x2000_000C 가 저장된다.
R14 는 링크 레지스터(LR) 이다.
함수 호출 시 돌아갈 주소를 저장하는 레지스터
(1) BL (Branch with Link) 명령을 실행하면, 다음 명령의 주소(PC+4)가 자동으로 r14(LR)에 저장됨
(2) 함수가 끝날 때 BX LR 명령으로 LR에 저장된 주소로 복귀함
R15 는 프로그램 카운터(PC) 이다.
다음 실행할 명령어가 저장된 메모리 주소를 저장하는 레지스터
ARM 아키텍처에서는
- 8 bit = byte
- 16 bit = half-word
- 32 bit = word
라고 부른다.
마프 열심히 안들었으면 큰 일 날 뻔했다,,,아찔하다,,,