원문 : http://forum.falinux.com/zbxe/index.php?document_srl=575677&mid=lecture_tip
arm register 그림 : http://recipes.egloos.com/4986854
오늘은 ARM register 중 하나인 cpsr 에 대해서 좋은 글이 있어서, 필요한 내용을 복사해 왔습니다.
이것 외에도 ARM 에 대해서 좋은 강좌가 많은 블로그 이니, 한번씩 들려보세요.
CPSR (Current Program Status Register)
프로그램의 상태를 저장하는 레지스터
31비트에서 24까지는 플래그(Flag) 비트,
23비트에서 16까지는 상태(Status) 비트,
15비트에서 8까지는 확장(Extension)비트,
7비트에서 0 비트까지는 제어(Control)비트
필 드 |
의 미
|
N
|
음수(Negative)플래그, 플래그 설정 연산 결과를 31 비트에 기록한다. |
Z
|
제로 (Zero) 플래그, 플래그 설정 연산 결과가 0인 경우에 기록한다. |
C
|
캐리 (Carry) 플래그, 덧셈에 대한 unsigned overflow를, 뺄셈에 대한 not-borrow를 기록한다. 쉬퍼트 회로에 의해서도 사용된다. |
V
|
오버플로우(Overflow) 플래그, 플래그 설정 연산에 대해 signed overlfow를 기록한다. |
Q
|
포화(Saturation) 플래그, 포화시에 일부 명령어가 이 플래그를 1로 설정한다. |
J
|
J = 1은 자바 실행이 가능함을 의미한다.( 이때 T = 0 이어야 함) 이 비트를 변경하기 위해서는 BXJ 명령어를 사용한다. ( ARMv5E 이상 ) |
Res
|
이 비트들은 확장을 위해 예약되어 있다. 소프트웨어는 이 비트들에 저장되어 있는 값을 유지해야함 |
GE[3:0]
|
SIMD greater-or-equal 플래그 |
E
|
데이터 엔디안값을 제어한다. |
A
|
A = 1은 블확실한 data abort를 비활성화 한다. |
I
|
I = 1 은 IRQ 인터럽트를 비활성화 한다. |
F
|
F = 1 은 FIQ 인터럽트를 비활성화 한다. |
T
|
T = 1은 Thumb 상태를 가리키고, T = 0은 ARM 상태를 가리킨다. 이 비트를 변경하기 위해서는 BX 또는 BLX 명령을 사용해야 한다. |
Mode
|
현재 프로세서 모드 |
각 arm mode 가 변경될때 CPSR 의 내용을 SPSR 로 복사해서 저장해 놓는다.
'Programming > Linux_Kernel' 카테고리의 다른 글
kernel log back ground 로 저장하기 (0) | 2013.11.27 |
---|---|
local_irq_disable(), local_irq_save(flags) 분석 (0) | 2013.10.31 |
arm 에서의 linux process 와 thread (0) | 2013.10.23 |
linux process memory usage (0) | 2013.10.22 |
linux kernel - list 사용하기 (2) | 2013.08.30 |