ARM
-ARM 명령어는 전형적으로 2개의 소스레지스터 Rn,Rm 과 하나의 결과 레지스터인 Rd를 가짐
-Rm은 ALU로 입력 되기 전에 배럴시프터를 거쳐 미리 선처리 작업을 할 수 있다.
-ARM 레지스터들은 한번에 최대 18개까지 활성화 할 수 있다.
-r0~r15까지의 데이터 레지스터 16개와 cpsr , spsr 프로그램 상태 레지스터
-ARM 프로세서는 특별한 작업이나 특수한 기능을 수행하기 위한 3개의 레지스터(r13~r15)
-cpsr : 32비트 이며 현재 상태를 저장하는 레지스터 이다.
8비트씩 플래그, 상태, 확장, 제어 로 나누워져 있다.(상태와 확장은 현재 예약 상태이다)
-abort 모드 : 메모리 액세스 실패 시 발생하는 모드
- FlQ 와 IRQ 모드 : 2가지 인터럽트 레벨을 위한 모드
-supervisor 모드 : 리셋 시 발생하는 모드
-system 모드 : user 모드의 특수한 버전으로 cpsr 레지스터를 읽고 쓰기가 가능하다.
-user 모드를 제외한 cpsr의 레지스터에서 비트를 직접제어함으로써 모드를 변경할수 있다.
단 여기서 cpsr를 직접 제어시 spsr에 복사는 이루어 지지 않는다.
-ARM은 ALU로 입력되기전에 배럴시프터에 의해 2진 단위로 좌우 시프트가 가능하다.
-이를 통해 많은 데이터 처리 명령어의 강력함과 유연성이 증진된다.
단 MUL, CLZ, QADD 명령어에서는 제외이다.
XLSLY à X << Y
XLSRY à X >> Y
뺄셈 ex) SUB r0 , r1, r2 à r0 = r1-r2
시프트 ex) MOVS r0,r1,LSL #1 à r0 = r1<<1
명령어에 S 가 붙어 있으므로 cpsr 안의 C 플래그가 업데이트 된다.
복사 ex) r5 = 5, r7 = 8, MOV r7 ,r5
반전 ex) RSB r0,r1, #0 à r0 = ~(0 – r1)
SUBS는 루프문에서 카운터를 감소시킬때에 사용하면 유용하다
Ex) SUBS r1,r1,#1 à r1 = r1 – 1
ADD r0 ,r1,r1,LSL #1 à r0 = r1+(r1<<1)
논리명령어
- AND , ORR, EOR,BIC(AND NOT)
- 논리명령어는 S 접미사가 있을경우에만 cpsr 플래그를 업데이트 한다.
비교명령어
- CMN <- 음수비교
- CMP <- 양수 비교(CMP 명령어는 실제로는 뺄셈명령어와 같으나 결과가 반영 되지 않음)
- TEQ 두 32비트값에 같을시 비교
- TST 32비트값의 테스트비트
- 오직 cpsr 의 상태 비트만을 업데이트 한다.
곱셈명령어
- 64비트 곱셈 명령어는 64비트를 표현하는 2개의 레지스터를 이용하여 곱셈한다.
- 곱셈결과는 하나의 결과 레지스터에 저장하거나 2개의 레지스터를 이용하여 저장
Ex) MUL r0,r1,r2 <- r0 = r1*r2
-64비트 곱셈 명령어(SMLAL, SMULL, UMLAL, UMULL)
-32비트 레지스터에 저장하기에 너무 크기 때문에 RDLo 와 RDHi라는 레이블이 붙은
2개의 레지스터에 저장
분기명령어
-실행의 흐름을 변경하거나 어떤 루틴을 호출하는데 사용
-서브루틴 이나 if-then-else 구조 , 루프문에 사용
-PC가 새로운 주소를 가리키도록 함으로써 실행의 흐름을 바꾼다.
다중레지스터전송명령어
- 하나의 명령어로 메모리와 프로세서 사이에서 여러 개의 레지스터를 전송
- 장점
n 메모리에서 여러블록의 데이터를 전송하거나 문맥과 스택을 저장하고 복구하는데
단일 전송 레지스터 보다 효과적이다.
- 단점
n 다른 명령어가 실행되지 못하게 하기 때문에 인터럽트 지연을 증대한다.
SWI명령어
- 프로세서 모드를 SVC로 변경시켜 운영체제루틴이 특권모드에서 호출될수 있도록 해줌
'Hard Ware > ARM' 카테고리의 다른 글
ARM에 관련한 용어들 (0) | 2012.05.16 |
---|