용's
[Chap 5] The ARM Instruction Set 본문
5.1 Introduction
- 데이터 타입은
signed/unsigned 8-bit(Byte)
signed/unsigned 16-bit(Half Word) -> 2 byte boundaries 로 할당됨(0x0, 0x2, 0x4, ...)
signed/unsigned 32-bit(Words) -> 4 byte boundaries로 할당됨(0x0, 0x4, 0x8, ...)
- ARM의 명령어들은 모두 32 bit(Word)로 할당
- 메모리 구조는 내부 데이터의 정렬 방식에 따라 빅 엔디안, 리틀 엔디안으로 두가지가 존재한다.
=> Little endian: 메모리의 하위 어드레스(바이트 어드레스 '0')에 LSB가 위치하고 있는 메모리 구조(Intel)
=> Big endian: 메모리의 하위 어드레스(바이트 어드레스 '0')에 MSB가 위치하고 있는 메모리 구조(모토로라)
- 특권 모드(Privileged Modes)는 예외처리 및 Supervisor call을 다루기 위해 사용된다.
=> 현재 모드에 대한 정보는 CPSR의 하위 5비트[4:0]에서 확인할 수 있다. 특권 모드로 들어가기전에 현재 CPSR의 상태를 SPSR(Saved Program Status Register)에 저장 한다.
5.2 Exception(예외처리)
- 3가지의 예외처리 그룹이 있음
=> 실행되고 있는 명령어의 Direct-Effect로 인한 (SWI, Undefined Instruction, Prefetch aborts) 예외 발생
=> 명령어의 Side-Effect로 인한 (Data Abort) 예외 발생
=> 외부에 의한(Reset, IRQ, FIQ) 예외 발생
- 예외 처리 복귀
=> 예외처리 처리가 완료되면 사용자는 다음과같은 절차를 수행할 수 있는 프로그램을 작성하여 이전 상태로 되돌아 갈수 있다.
첫 째, PC값을 r14로 부터 복원한다.
둘 째, SPSR을 CPSR에 복원한다.
위의 두가지 일이 동시에 이루어져야 하며, 만약 동시에 이루어지지 않으면 둘 중 하나를 처리하지 못하기 때문이다.
=> 데이터 처리 명령에 S 접미사를 사용하고, PC를 대상 레지스터로 지정하면 CPSR값이 복원 대면서도 PC도 LR을 이용하여 계산하고 복원하는데 용이하다.
예) SUBS PC, r14, #4
MOVS PC, LR
=> Prefetch Abort, IRQ, FIQ 경우에는 DECODE 단계에서 일어나므로 한 명령어 되돌아 가기 위해 PC-4를 해준다.
=> Data Abort는 EXECUTE 단계에서 일어나므로 두 명령어 되돌아가기 위해 PC-8을 해준다.
- 예외처리에 우선 순위가 존재한다.
=> RESET(Highest), Data abort, FIQ, IRQ, Prefetch abort, SWI 순으로 우선순위가 있음
5.6 Software interrupt(SWI)
- 이전 3장에서 이미 배운 내용이지만 더 자세히 보자.
- 프로그램 제어 목적으로 프로세서가 슈퍼바이저 모드로 전환되어 정해진 처리를 할 수 있도록 하는 명령이다.
- 이 명령은 OS에서 시스템 콜을 만들 때와 디버깅의 목적으로 사용된다.
- 명령 호출 절차는 프로세서가 예외처리 절차에 따라 CPSR을 SPSR_svc에 저장하고 PC를 0x08로 분기한다. (0x08번지에는 SWI 핸들러로 분기하기 위한 명령이 들어 있음.) SWI 핸들러는 발생한 SWI 명령에 기재된 호출 번호를 보고 해당하는 적당한 동작을 실행한다.
31 28 27 24 23 0
Cond |
1 1 1 1 |
SWI 번호 |
'Computer Science > Embedded System' 카테고리의 다른 글
[Chap 9] ARM Processor Cores (0) | 2014.12.16 |
---|---|
[Chap 8] Architecture Support for System (0) | 2014.12.12 |
[Chap 4] ARM Organization & Implementation (0) | 2014.10.21 |
[Chap 3] ARM Assembly Language Programming (0) | 2014.10.17 |
[Chap 2] The ARM Architecture (0) | 2014.10.11 |