개념을 이해하기 위해 찾아보다가 정리가 굉장히 잘 되있는 사이트를 발견했다.
찬찬히 읽어보며 이해해봐야지 JK전자와 함께하는 ARM 완전정복
● Program Status Register (PSR)
▷ ARM의 PSR
- 1개의 CPSR(Current Program Status Register)
- 5개의 SPSR(Saved Program Status Register)
● PSR 레지스터의 정보
▷ Condition code flag
- ALU의 연산 결과 정보를 가지는 flag 정보를 가지고 있다. -> ALU를 통한 명령의 실행 결과를 나타내는 부분이다.
1) N 비트(Negative flag)
- ALU 연산 결과가 마이너스가 발생한 경우(연산결과 맨 꼭대기 비트가 1이 될 경우) set
2) Z 비트(Zero flag)
- ALU 연산 결과 0이 발생한 경우 set
3) C 비트(Carry flag)
- ALU연산 결과 자리올림이 발생하거나 내림이 발생하지 않은 경우 set
- Shift 연산에서 carry사 발생한 경우 set
ex. 덧셈후 32비트 이상 비트가 증가하여 넘어갈 때 set
ex2. 작은수에서 큰 수를 뺄 때 작은 수에 한자리 빌려옴. (버로우 (B))( 빼기시 버로우의 반대 비트 (B=~C))
4) V 비트(oVerflow flag)
- ALU 연산 결과 overflow가 발생하면 세트 (더하기로 맨 꼭대기 비트가 켜질 때)
5) Q 비트(Q flag)
- ARM Architecture v5TE/J에서 새롭게 추가된 saturation 연산 명령의 수행결과 saturation이 발생시 set
- 이 비트는 사용자에 의해서만 클리어 된다.
6) J 비트
- ARM Atchitecture v5TE/J에서 새롭게 추가된 Java 바이트 코드를 수행하는 Jazelle state 임들 나타낸다.
▷ Control bits
⊙ 프로세서의 모드, 동작 state와 인터럽트를 제어
- I/F 비트
: IRQ('I' 비트) 또는 FIQ('F' 비트)를 막는 mask 역할을 하는 비트(다른 인터럽트를 처리중이거나 더 급한 일이 있을 경우), (인터럽트와 F인터럽트가 동시에 들어오면 인터럽트 컨트롤러에서 관리 한다.)
- T 비트
:- BX 명령에 의해서만 제어
:- Thumb state임을 나타낸다.
:- 상태를 나타낼 뿐 프로세서는 이 비트에 강제로 값을 write 할 수 없다.
▷ Mode bits
- ARM의 7가지 동작 모드를 나타낸다.
● Exception
- 외부의 요청이나 오류에 의해 정상적으로 진행되는 프로그램의 동작을 잠시 멈추고 프로세서의 동작 모드를 변환하고 미리 정해진 프로그램을 이용하여 외부의 요청이나 오류에 대한 처리를 하도록 하는 것.
ex) I/O장치에서 인터럽트를 발생시키면 IRQ Exception이 발생하고, 프로세서는 발생된 IRQ Exception을 처리하기 위해 IRQ 모드로 전환되어 요청된 인터럽트에 맞는 처리 동작 수행.
▷Exception Vector
- Exception이 발생하면 미리 정해진 어드레스의 프로그램을 수행.
- 미리 정해진 프로그램의 위치를 Exception Vector라 한다.
▷Exception Vector Table
- 발생가능한 각각의 Exception에 대하여 Vector를 정의해 놓은 테이블.
:- 각 Exception별로 1word 크기의 ARM 명령어 저장 공간을 가진다.
- Vector table에는 Branch 명령어 또는 이와 유사한 명령으로 실제 Exception을 처리하기 위한 루틴으로 분기 할 수 있는 명령으로 구성되어 있다.
:- FIQ의 경우는 Vector Table의 맨 상위(마지막)에 위치하여 분기명령 없이 처리 루틴을 프로그램 할 수 있다.
- ARM은 기본적으로 0x00000000에 vector table을 둔다. (MMU제어 프로그램에 의해 위치 변경 가능)
* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.
'임베디드 개발(before) > IoT 임베디드 SW 개발자 양성과정' 카테고리의 다른 글
[29일차] ARM 프로세서 이해 및 활용 (Cache, MMU) (0) | 2020.08.21 |
---|---|
[28일차] ARM 프로세서 이해 및 활용(ARM 프로세서의 명령어) (0) | 2020.08.20 |
[26일차] ARM 프로세서 이해 및 활용 (임베디드 시스템의 구조, ARM Architecture 전반적인 구조) (0) | 2020.08.18 |
[25일차] 탐색 알고리즘(순차, 이분, 이진트리, 레드-블랙, 해쉬) (0) | 2020.08.14 |
[24일차] 정렬 알고리즘(선택, 삽입, 거품, 쉘, 퀵, 기수, 힙) (1) | 2020.08.13 |