![Page 1: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/1.jpg)
11
5. ARM 5. ARM 명령어명령어 세트세트
- 전체 요약
![Page 2: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/2.jpg)
22
5.1 서론
- 데이터 형태
ARM은 기본적으로 6개의 데이터 형태를 지원함
8, 16, 32 비트 signed, unsigned byte, half-word, word (half-word와
word는 메모리에서 2-바이트, 4-바이트 경계로 align됨)
ARM의 모든 명령어는 32 비트 워드, word-align 되어 있고 Thumb 명령어
는 half-word이며 2 바이트 경계로 align 되어 있음
ARM coprocessor는 부동 소수점과 같은 다른 데이터 형태를 지원
부동 소수점 coprocessor가 없는 경우 부동 소수점 형태는 기본 데이터 형
태를 사용하는 소프트웨어에 의해 번역 (변환)됨
- 메모리 구조
Little endian : 주소가 증가하는 방향으로 하위 바이트부터 차례로 저장
Big endian : 주소가 증가하는 방향으로 상위 바이트부터 차례로 저장
ARM은 기본적으로 little-endian이지만 어느 방식도 사용 가능
![Page 3: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/3.jpg)
33
- 특권 모드 (privileged mode)
대부분의 프로그램은 사용자 모드에서 처리되지만 예외를 처리하거나
supervisor calls을 처리하기 위해 특별한 동작 모드를 제공
현재의 동작 모드는 CPSR 레지스터의 하위 5비트에 의해 설정 가능
각 특권 모드가 시작될 때 사용자 모드가 정상적으로 다시 시작될 수 있도
록 CPSR의 상태는 각 모드의 SPSR 레지스터에 저장되어야 함
![Page 4: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/4.jpg)
44
5.2 예외
- 예외의 종류
예외는 인터럽트와 메모리 폴트와 같이 프로그램 실행 동안 예기치 못한
사건을 처리하기 위해 사용, ARM은 3가지 형태의 예외로 구분
- 예외 시작
예외가 발생하면 ARM은 현재의 명령어를 처리하고 예외 처리를 시작,
예외가 reset인 경우 현재의 명령어를 즉시 종료하고 예외 처리
![Page 5: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/5.jpg)
55
side-effect나 외부에서 발생하는 예외는 다음 명령어를 침해하여 예외 시
퀀스가 처리되지만 direct-effect 예외는 발생하는 시퀀스에서 처리됨
예외가 발생할 때 프로세서의 동작 시퀀스
![Page 6: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/6.jpg)
66
각 벡터 어드레스에는 예외 처리 함수로 이동하는 branch 명령이 있음
각 특권 모드에는 두 개의 bank 레지스터 (r13_{mod}, r14_{mod})가 복귀
주소와 스택 포인터를 저장하기 위해 사용
스택 포인터는 예외 처리에서 사용되는 레지스터를 스택에 저장
FIQ 모드에서는 보다 나은 성능을 위해 추가적인 레지스터(r8_fiq –
r12_fiq)
를 제공, 사용자 레지스터를 저장할 필요가 없거나 최대한 줄일 수 있음
Supervisor call이 supervisor call을 요청하는 경우 (re-entrant) SPSR 레
지스터는 일반 레지스터에 저장되어야 함
- 예외 복귀
예외 처리 후 사용자 모드의 상태는 정확하게 복원되어야 함
![Page 7: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/7.jpg)
77
CPSR과 PC 복원은 동시에 실행되어야 함
CPSR이 먼저 복원되면 bank 레지스터 r14는 접근 불가능하고 PC이 먼저
복원되면 명령어 흐름이 바뀌어 CPSR 복원이 불가능
하나의 명령어로 두 단계가 동시에 실행되는 메커니즘을 제공
복귀 주소가 bank 레지스터 r14에 있는 경우의 복원
![Page 8: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/8.jpg)
88
복귀 주소가 스택에 있는 경우 (re-entrant 동작)는 스택 어드레싱에 의한
다중 레지스터 이동 명령어를 사용하여 복원
LDMFD r13!, {r0-r3, pc}^ ; restore and return
PC이 복원되는 동시에 CPSR도 복원됨, 스택 복귀 메커니즘 사용을 위해
복귀 주소가 스택에 저장되기 전에 조정되어야 함
- 예외 우선 순위
여러 개의 예외가 동시에 발생하는 경우 우선 순서가 높은 예외부터 처리
![Page 9: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/9.jpg)
99
5.5 Branch, Branch with Link and eXchange (BX, BLX)
![Page 10: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/10.jpg)
1010
Software Interrupt (SWI)
![Page 11: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/11.jpg)
1111
5.7 데이터 처리 명령어 형식
![Page 12: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/12.jpg)
1212
5.10 싱글 워드와 부호 없는 바이트 데이터 이동 명령어 형식
![Page 13: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/13.jpg)
1313
5.11 하프 워드와 부호 있는 바이트 데이터 이동 명령어 형식
![Page 14: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/14.jpg)
1414
5.12 다중 레지스터 이동 명령어 형식
![Page 15: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/15.jpg)
1515
5.13 메모리와 레지스터 내용을 서로 교환하는 명령어 형식 (SWP)
5.14 상태 레지스터 내용을 일반 레지스터로 이동시키는 명령어 형식
![Page 16: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/16.jpg)
1616
5.15 일반 레지스터 내용을 상태 레지스터로 이동시키는 명령어 형식
![Page 17: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/17.jpg)
1717
5.16 Coprocessor 명령어
- ARM은 coprocessor를 추가하여 명령어 세트를 확장하는 메커니즘을 지원
가장 일반적인 coprocessor는 캐쉬나 메모리 관리 장치 (MMU)와 같은
on-chip 함수들을 제어하기 위해 사용
부동 소수점 연산이나 특별한 목적을 위해 coprocessor 사용 가능
- ARM coprocessor는 자체의 레지스터를 가지고 있고 ARM이 명령어 실행을 제어
하기 때문에 coprocessor는 데이터 처리와 데이터 이동 명령어를 처리
- ARM coprocessor 주요 동작
데이터 처리 : coprocessor 내부 레지스터의 내용을 이용하여 연산을 수행
하고 결과를 coprocessor 내부 레지스터에 저장
데이터 이동 : 메모리 접근을 위한 주소는 ARM이 발생하고 coprocessor는
데이터 이동의 수를 제어함 (최대 16 워드), 이동할 때 데이터 변환을 실행
레지스터 이동 : ARM과 coprocessor 레지스터 사이 데이터를 이동함,
coprocessor 비교 결과는 제어 흐름을 위해 ARM CPSR로 이동하여야 함
![Page 18: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/18.jpg)
1818
5.17 Coprocessor 데이터 처리 명령어 형식
5.18 Coprocessor 데이터 이동 명령어 형식
![Page 19: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/19.jpg)
1919
5.19 Coprocessor 레지스터 이동 명령어 형식
5.21 사용되지 않는 명령어 공간
- 사용되지 않는 명령어 코드 형식이나 정의되지 않은 opcode를 실행할 때 ARM은
undefined 명령어 트랩을 발생 (undefined 예외 모드 실행)
![Page 20: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/20.jpg)
2020
5.22 메모리 폴트(faults)
- 프로세서에 의한 메모리 접근이 정확하게 완료될 수 없는 경우 메모리 시스템은
메모리 폴트를 나타내는 신호를 프로세서에 보냄
- 프로세서는 메모리 폴트가 발생하면 abort 예외를 시작하고 시스템 소프트웨어로
문제 해결을 시도함
- 메모리 폴트가 발생하는 주요 원인
페이지 부재 : 요청된 메모리 위치가 있는 페이지가 디스크에 있는 경우
시스템 소프트웨어는 요청된 페이지를 디스크로부터 메모리로 복사한 후에
폴트된 메모리 접근을 다시 시도
페이지 보호 : 요청된 메모리 위치를 접근할 수 없는 경우, 단지 읽을 수만
있는 페이지에 쓰기 명령으로 내용을 변경하려고 할 때 폴트 발생
메모리에서 에러가 검출된 경우, 에러 검출 블록만 있고 에러 정정 블록이
없는 경우는 더 이상 실행 불가능 (디스크를 사용하지 않고 메모리 용량이
작은 임베디드 시스템인 경우 메모리 폴트를 검출, 정정하는 블록이 없음)
![Page 21: 5. ARM 명령어세트vlsi.hongik.ac.kr/lecture/이전 강의 자료/em/ARM...17 5.16 Coprocessor 명령어-ARM은coprocessor를추가하여명령어세트를확장하는메커니즘을지원](https://reader030.vdocuments.net/reader030/viewer/2022040801/5e39e8fd988ae84eae38ab80/html5/thumbnails/21.jpg)
2121
- ARM은 명령어 fetch에서 발생한 메모리 폴트와 데이터 접근에서 발생하는 메모리
폴트를 구분하여 prefetch abort, data abort 예외를 처리함
5.23 ARM 구조 변형
- Version 3 : 32 비트 어드레싱, 독립적인 CPSR과 SPSR, coprocessor emulation
과 가상 메모리 지원을 위해 undefined와 abort 모드 추가, (ARM6, ARM600,
ARM610, ARM7, ARM700, ARM710)
- Version 4 : signed and unsigned half-word와 signed byte 저장, 적재 명령어를
추가, 시스템 모드 도입 (StrongARM, ARM8, ARM810)
- Version 4T : 16 비트 Thumb 명령어 형식 도입 (ARM7TDMI, ARM720T,
ARM740T, ARM9TDMI, ARM920T, ARM940T)
- Version 5T : BLX, CLZ, BRK 명령어를 지원
- Version 5TE : 신호처리 명령어 세트 확장 (ARM10TDMI, ARM1020E)