반응형
PSTATE는 프로세서 상태(Processor STATE) 정보를 제공하는데, aarch64 전용, aarch32 전용,
aarch64와 aarch32의 공통 속성으로 구성된다.
ARMv7에서 현재 프로세스 정보를 나타내는 CPSR과 1:1 대응하지 않는다.
aarch64 전용
이름 | 타입 | 설명 |
D(Debug) | 익셉션 마스크 | 이 비트가 설정되면 디버그 익셉션 발생을 막는다. |
SP(Stack Pointer selector) | 실행 살태 제어 | 사용할 스택 포인터를 선택한다. 0은 SP_EL0사용하고, 1은 SP_ELx를 사용한다. |
공통
이름 | 타입 | 설명 |
N(Negative) | 조건 플래그 | 연산 결과가 음수인 경우 설정 |
Z(Zero) | 조건 플래그 | 연산 결과가 0인 경우 설정 |
V(Overflow) | 조건 플래그 | 캐리가 발생할 경우 설정 (덧셈에서 부호 없는 오버플로) |
A(SError) | 익셉션 마스크 | 이 비트가 설정되면 System Error 익셉션 발생을 막는다 |
I(IRQ) | 익셉션 마스크 | 이 비트가 설정되면 IRQ 익셉션 발생을 막는다 |
F(FIQ) | 익셉션 마스크 | 이 비트가 설정되면 FIQ 익셉션 발생을 막는다 |
SS(Software Step) | 실행 상태 제어 | SS가 활성화된 상태에서 1은 active-not 펜딩 상태이고, 0은 active 펜딩 상태를 의미한다. |
IL(Illegal Execution State) | 실행 상태 제어 | 이 비트가 설정되면 임의의 명령을 실행하기 위한 어떤 시도도 Illegal Execution State 익셉션을 유발한다 |
EL(Exception Level) | 실행 상태 제어 | 현재 익셉션 레벨을 나타낸다 |
nRW | 실행 상태 제어 | 현재 실행 상태를 나타낸다 0은 aarch64, 1은 aarch32 실행 상태 |
aarch32 전용
Q(cumulative saturation) | 상태 플래그 | 인스트럭션 수행 결과 오버플로나 포화(saturation)가 있었음을 나타낸다 |
GE(Greater than or Equal) | 상태 플래그 | SIMD 인스트럭션에서 각 바이트나 하프워드 연산 결과 오버플로가 발생할 경우 설정 |
IT(If-Then) | 실행 상태 | Thumb-2 인스트럭션 세트의 조건부 실행 처리에 사용 |
J(Jazelle) | 실행 상태 | Jazelle 실행 상태임을 표시 |
T(T32) | 실행 상태 | Thumb 실행 상태임을 표시 |
E(Endianness) | 실행 상태 제어 | 엔디안을 설정하고 읽을 때 사용 |
M(Mode) | 실행 상태 제어 | 프로세서 모드를 설정하고 읽을 때 사용 |
NZCV와 DAIF 필드는 EL0에서도 접근 가능하며, 그 외 비트는 EL1 이상에서만 접근 가능하다.
익셉션이 발생했을 떄 PSTATE가 갱신되고 몇몇 비트가 SPSR_ELn 레지스터에 복사되며,
익셉션에서 복귀할 떄 SPSR_ELn 레지스터가 PSTATE로 복사된다.
반응형
'리버싱 > ARM' 카테고리의 다른 글
시스템 레지스터 (0) | 2021.02.09 |
---|---|
aarch64 특수 목적 레지스터 (0) | 2021.02.09 |
ARMv8 레지스터 (0) | 2021.02.09 |
실행 상태 변경 (0) | 2021.02.09 |
실행 상태 (0) | 2021.02.09 |