안녕하세요~


오늘은 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/ 여기로 찾아오세요~