ARM의 상태 레지스터 내부 구조
ARM은 2가지의 상태 레지스터(Status Register) 종류를 가지고 있으며, 1개의 CPSR과 6개의 SPSR로 구성된다.
각각의 종류 모두 내부 구조는 32bit 길이로 동일하다.
각각의 비트에 따라 동작 모드, ARM/Thumb 명령어 상태, 인터럽트 상태, ALU 연산 결과에 대한 정보를 저장한다.
플래그 비트(Flag Bit)
플래그의 뜻은 어원은 깃발을 들거나 내리는 행위를 말한다.
프로그래밍 개념에서는 무엇인가를 기억해야하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로,
프로그램에 의해 사용되는 미리 정의된 비트를 말한다.
상태 레지스터에서 플래그 비트는 ALU의 연산 결과에 대한 상태 정보를 나타낸다.
ALU의 연산 결과에 따라 클리어 또는 세트된다.
Negative(N) 플래그 비트 [31] : N 플래그는 연산 결과가 마이너스인 경우에 세트된다.
Zero(Z) 플래그 비트 [30] : Z 플래그는 연산 결과가 0인 경우에 세트된다.
Carry(C) 플래그 비트 [29] : C 플래그는 Carry(자리 올림)이 발생한 경우 세트된다. 바로우(Borrow) 플래그로 사용될 수도 있는데, 이 경우는 바로우가 발생하면 캐리가 클리어되고 바로우가 없으면 캐리가 세트된다.
OrverFlow(V) 플래그 비트[28] : V 플래그는 연산 결과가 오버플로우일 경우 세트된다.
Q(Q) 플래그 비트[27] : 연산 명령의 수행 결과가 포화(Saturation)일 경우 세트된다.
이 경우는 사용 후 Q 플래그를 클리어해야 한다.
IT(If-then) 비트[26:25] : IT 명령을 지원하는 프로세서에 지원되며 Extension 비트의 IT[15:10] 비트와 함께
IT 명령의 실행 상태를 표현한다.
J 비트[24] : ARM 아키텍처 5VTEJ 이상에서 사용할 수 있는 비트로,
현재 프로세서가 자바 바이트 코드를 실행하는 제이젤 상태를 나타낸다.
제이젤 상태란 자바 바이트 명령어를 처리하는 상태를 말한다.
상태 비트(Status Bit)
상태 비트는 ARM 아키텍처에 따라 다르지만, Reserved된 경우가 많다.
GE(Gerater than or Equal) 비트[23:20] : GE 비트는 SIMD 명령 실행 시 하프워드 또는
바이트 수행 결과를 표시하는 비트이다.
DNM(Do Not Modify) 비트[19:16] : DNM 비트는 단어 뜻 그대로 수정 불가한 비트로, DNM 비트는 0으로 읽힌다.
확장 비트(Extension Bit)
IT(If-then) 비트[15:10] : IT 명령을 지원하는 프로세서에 지원되며 Flag 비트의 IT[26:25] 비트와 함께 IT 명령의 실행 상태를 표현한다.
E 비트[9] : E 비트는 데이터 로드 또는 스토어 동작 시 메모리에 배치되는 데이터의 구조를 저장하기 위해 사용된다.
A 비트[8] : A 비트는 Imprecise Abort를 비활성화하기 위해 사용되는 비트이다.
디폴트 값이 1로 설정되어 있어 Imprecise Abort를 지원하지 않는다.
컨트롤 비트(Control Bit)
컨트롤 비트는 ARM 프로세서의 8가지 동작 모드와 인터럽트를 제어, ARM/Thumb 명령어 상태 정보를 가지고 있다.
I[7], F[6] 비트 : I와 F 비트는 같이 사용되는 비트이며, 두 비트 모두 세트 시 CPU는
외부로부터 입력되는 인터럽트를 처리하지 않는다.
T[5] 비트 : T 비트가 세트되어 있으면 Thumb 상태, 클리어되어 있으면 ARM 상태를 나타낸다.
T 비트는 읽기 전용이므로 사용자가 값을 변경할 수 없다.
Mode(M) 비트[4:0] : Mode 비트는 비트 값에 따라 8가지의 동작 모드를 나타낸다.
10000 : User Mode
10001 : FIQ Mode
10010 : IRQ Mode
10011 : SVC Mode
10110 : Monitor Mode
10111 : Abort Mode
11011 : Undefined Mode
11111 : System Mode
'Embedded > 이론' 카테고리의 다른 글
[Embedded] 툴체인(Toolchain) (0) | 2022.11.15 |
---|---|
[Embedded] 임베디드 리눅스란 (0) | 2022.11.15 |
[Embedded] ARM 구성 레지스터 (0) | 2022.11.15 |
[Embedded] ARM 동작 모드와 레지스터 (0) | 2022.11.15 |
[Embedded] ARM의 개요 (2) | 2022.11.15 |