레지스터프로세서가 작업을 하는데 사용되는 값을 저장하는 공간
ARM에는 32비트 길이의 37개 레지스터가 있다.
레지스터 종류1. 30개의 범용( General Purpose ) 레지스터
//대부분의 데이터 연산에 사용
//프로세서의 동작( Operating ) 모드에 따라 사용되는 레지스터가 제한된다
2. 1개의 프로그램 카운터 ( PC : Program Counter )
//프로그램을 읽어올 메모리의 위치를 나타낸다
3. 1개의 CPSR ( Current Program Status Register )
//프로세서가 수행하고 있는 현재의 동작 상태를 나타낸다
4. 5개의 SPSR ( Saved Program Status Register )
//이전모드의 CPSR 의 복사본
//Exception 이 발생하면 하드웨어적으로 이전모드의 CPSR값을 각각의 모드에 해당하는 SPSR에 복사
//System 모드를 제외한 모든 Privilge(특권) 모드에 각각 하나씩 존재
뱅크 레지스터프로세서가 특정 모드에 있을 때만 사용가능한 레지스터
프로세서 모드어떤 레지스터가 활성화되고 cpsr 레지스터를 Access 할 수 있는 권리를 같게 될지를 결정
1개의
일반모드( user ), 6개의
특권모드 ( abort, FIQ, IRQ, superviser, system, undefined )
Stack Pointer ( SP or R13 )프로그램에서 사용하는 스캑의 위치를 저장하는 레지스터
프로세서의 동작 모드마다 별도로 할당된 SP를 가지고 있다.
ARM은 별도의 Stack 명령이 없다 - LDR/STR, LDM/STM과 같은 데이터 명령으로 Stack처리
Link Register ( LR or R14 )서브루틴에서 되돌아갈 위치 정보를 저장하고 있는 레지스터
서브루틴을 호출하는 BL 명령을 사용하면 PC값을 자동으로 LR에 저장
되돌아 갈때는 MOV 명령을 이용하여 LR 값을 PC에 저장 -- MOV PC, LR
ADD 나 SUB와 같은 연산명령을 사용하여 되돌아갈 위치를 조정할 수도 있음
프로세서의 동작 모드마다 별도로 할당된 LR 레지스터를 가지고 있다
Program Counter ( PC or R15 )프로그램을 수행하는 위치를 저장하고 있는 레지스터
ARM State : 위치정보 [31:2] 저장
Thumb State : 위치정보 [31:1] 저장
다른 범용 레지스터와 마찬가지로 ADD, SUB와 같은 연산 명령 사용 분기 위치 조정가능
프로세서의 모든 동작모드에 대하여 하나만 존재 한다