ARM 아키텍처

- 아키텍처 = 명령어 체계 자체(명령어들을 instruction set 혹은 어셈블리어라 함)

- 아키텍처 기반으로 CPU 코어 설계

- 하나의 아키텍처로 여러 가지 코어 설계 가능

- ARM Cortex 시리즈 : A, R, M

* ARMv1 -> ARMv2 : MUL 추가

* ARMv2 -> ARMv3 : 프로세스 캐시 추가

 

ARM CPU

- STM32F103 : ARMv7-M 아키텍처 구조, ARM Cortex-M3 코어 사용

- Exynos4412 : ARMv7-A 아키텍처 구조, ARM Cortex-A9 코어 사용

 

 

 

ARM 코어 레지스터

- 동작 모드 : User, FIQ, SVC, Abort, IRQ, undefined

- 일정 조건에 따라 자동으로 바뀜

- User -> IRQ -> User : 펌웨어로 제어

- System : CPU가 특수 상황시 전환

- User : R0 ~ R15의 16개 + CPSR 레지스터 사용

- SVC(supervisor), Abort, IRQ, Undefined : R13, R14, SPSR 레지스터 사용

- 총 37개 레지스터 사용 = 17 + 8 + 3 + 3 + 3 + 3

- 동작 모드 별 레지스터

 

 

ARM 명령어 체계

- ARM 모드 : 32비트 체계

- Thumb 모드 : 16비트 명령어 체계, 일부 레지스터만 사용, 컴파일 시 Thumb 전용 컴파일러나 옵션으로 선택

 

ARM 코어 레지스터

- R15 : 프로그램 카운터

- R14 : 링크 레지스터, 서브루틴 함수서 돌아갈 주소

- R13 : 스택 포인터

- CPSR current program status register 

- SPSR saved program status register : cpsr 레지스터 값을 모드마다 백업용으로 저장하기 위해 사용.

 

 

 

명령어 집합 종류

- 분기 명령 : 함수, if then else 구조

- 데이터 처리 명령 : 프로세서 내부 데이터 이동, 산술, 논리, 비교 명령어

- 상태 레지스터 접근 명령 : CPSR, SPSR 제어 명령어

- Single register load and store instruction : 프로세서 메모리 간 단일 데이터 전송명령

- 다중 레지스터 로드 앤 스토어 레지스터 : 프로세서 메모리 간 다중 데이터 전송 명령

- 코프로세서 명령 : coprocossor(ARM core에서 처리못하거나 확장기능 구현시 사용하는 별도 프로세서) 제어 명령

 

ARM 명령어 집합 포멧

- 명령어 종류 별로 다른 형식

 

 

Thumb 명령어 집합

- 16비트 명령어 체계

- 보통 ARM 코드에 비해 30% 메모리 절약

- BX, BLX 명령으로 ARM 과 Thumb 상태 변환

+ Recent posts