강좌 & 팁
안녕하세요~
오늘은 ARM 레지스터에 관하여 간단하게! 알아보겠습니다.
ARM 레지스터
ARM은 32비트 길의 레지스터를 37개 가지고 있습니다.
30개의 범용 레지스터와 한 개의 PC, 한 개의 CPSR, 5개의 SPSR 을 합치면!?
30 + 1 + 1 + 5 = 37 이겠죠?
이 레지스터에 관하여 간단하게 정리해 보겠습니다.
1. 범용 레지스터
범용 레지스터는 말 그대로 다양한 범용(다목적)으로 사용되며 동작 모드별 공유할 수 잇는 레지스터와 모드별 할당 레지스터가 있습니다.
2. PC (Program Counter)
프로그램 카운터(PC)는 다음과 같은 역활을 하는 레지스터 입니다.. ^^
- 프로그램을 읽어올 메모리 위치를 나타냅니다.
- 32비드 ARM 모드에서는 [31:2]에 읽어올 주소를 저장합니다.
- 16비트 Thumb 모드에서는 [31:1]에 읽어올 주소를 저장합니다.
- PC는 모든 동작모드에서 공유하여 사용할 수 있습니다.
3. CPSR(Current Program Status Register)
CPSR은 다음과 같은 역활을 하는 레지스터 입니다.
- 현재 동작중인 프로세서의 상태를 나타냅니다.
- 모든 동작 모드에서 공유하여 사용할 수 있습니다.
4. SPSR(Saved Program Status Register)
SPSR은 다음과 같은 역활을 당당하는 레지스터 입니다. ^^
- 이전 동작모드의 CPSR의 정보를 복사하여 자장합니다.
- 표현되는 정보는 CPSR과 같습니다.
- User, System 모드를 제외한 5개의 동작모드 전환 시 이전 동작모드의 CPSR 저장 합니다.
- 각 모드 별 1개씩 할당하여 사용 됩니다.
5. 레지스터 명칭
- 각각의 동작모드에서 PC를 포함한 16개의 레지스터를 사용할 수 있습니다.
- R0 ~ R15까지 키워드를 부여하여 사용합니다.
- R15는 PC로 사용되며 일반 범용 레지스터와 같이 사용가능 합니다.
6. SP(Stack Pointer)
- 프로그램에서 사용하는 메모리 중 스택의 TOP 위치를 저장합니다.
- "R13, SP" 키워드로 사용가능 합니다.
- ARM은 스택관리를 위한 별도의 PUSH/POP 명령 대신 LDR/STR, LDM/STM 과 같은 데이터 전송 명령을 이용합니다.
7. LR(Link Register)
- 서브루틴 함수에서 되돌아갈 주소를 지정하거나 예외처리 후 되돌아갈 주소를 저장 합니다.
- "R14, LR" 기워드 모드 사용가능 합니다.
- BL 명령 사용시 복귀주소를 자동으로 LR에 저장합니다.
- 복귀시, MOV 명령으로 LR 값을 PC에 복원하여 복귀할 수 있습니다.
8. ARM 에서 모드별 별도의 레지스터를 사용하는 이유
- 동작모드의 전환은 예외처리에 의해 발생하기 때문입니다.
- 예외처리 후 북귀하기 위해 레지스터 및 상태 값을 복원해야 하기 때문입니다.
- 예외처리 후 기존의 프로그램을 계속 실행하기 위해 레지스터나 상태 값의 복원을 해야하기 때문입니다.
- R0 - R12 의 범용 레지스터는 모드별 별도의 백업 레지스터가 없기 때문입니다.
앞으로?
오늘은 ARM 레지스터에 관하여 알아 보았습니다.
다음글에서는 동작모드와 상태 레지스터에 관한 내용을 보충해 보겠습니다. ^^
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~