728x90
ARM 명령어 요약
1. ASL, ASR, LSL, LSR, ROR
ASL : 왼쪽으로 쉬프트, 빈자리 부호 (Arithmetic Shift Left)
ASR : 오른쪽으로 쉬프트, 빈자리 부호 (Arithmetic Shift Right)
LSL : 왼쪽으로 쉬프트, 빈자리 0 (Logical Shift Left)
LSR : 오른쪽으로 쉬프트, 빈자리 0 (Logical Shift Right)
ROR : 오른쪽으로 로테이션 (Rotation Right)
2. MOV
예)
MOV r0, [r1, r2] : r1+r2주소에 있는 값을 읽어서 r0에 저장한다.
MOV r0, r1, ROR #1 : r1을 오른쪽으로 한 비트만큼 rotation해서 r0에 저장한다.
3. ADD, SUB, AND, ORR
산술연산들.
예)
ADD r1, r2, #4 : r2에 4를 더해서 r1에 저장한다.
SUB r1, r1, #1 : r1에 1을 뺀다.
ORR r1, r2, r3, LSR r4 : r3을 오른쪽으로 쉬프트를 r4만큼 한 후, 그 결과를 r2와 OR하여 r1에 저장한다.
4. B, BL, BNE, BEQ, CMP
분기명령들.
예)
B there : 라벨이 there인 곳으로 무조건 분기한다. (Branch)
BEQ there : 플래그가 0이면 there로 분기한다. 아니면 다음 명령어를 수행한다. (Branch Equal)
BNE there : 플래그가 0이 아니면 there로 분기한다. 아니면 다음 명령어를 수행한다. (Branch Not Equal)
BL sub+ROM : 계산된 위치의 서브루틴을 호출한다. (Branch with Link)
CMP r1, #4 : r1이 4이면 플래그 0로 셋팅된다.
5. LDR, STR {레지스터}, {주소}, {증가량}
로드, 스토어 명령들.
LDRB : byte변수를 불러올 때
LDRH : short변수를 불러올 때
LDR : int변수를 불러올 때
STR도 마찬가지다.
예)
LDR r1, [r2, #16] : r2에 16byte만큼 더한 주소에서 정수형 값을 읽어와 r1에 저장한다.
STR r1, [r2], #4 : r2의 주소에 r1을 저장하고 난 후, r2를 4만큼 증가시킨다.
6. LDM, STM
로드, 스토어 명령들.(블록단위)
LDMFD : Load Multiple Full Descending / LDMIA : Load Multiple Increment After
STMFD : Store Multiple Full Descending / STMDB : Store Multiple Decrement Before
LDMED : Load Multiple Empty Descending / LDMIB : Load Multiple Increment Before
STMED : Store Multiple Empty Descending / STMDA : Store Multiple Decrement After
LDMFA : Load Multiple Full Ascending / LDMDA : Load Multiple Decrement After
STMFA : Store Multiple Full Ascending / STMIB : Store Mutiple Increment Before
LDMEA : Load Multiple Empty Ascending / LDMDB : Load Multiple Decrement Before
STMEA : Store Multiple Empty Ascending / STMIA : Store Multiple Increment After
ASL : 왼쪽으로 쉬프트, 빈자리 부호 (Arithmetic Shift Left)
ASR : 오른쪽으로 쉬프트, 빈자리 부호 (Arithmetic Shift Right)
LSL : 왼쪽으로 쉬프트, 빈자리 0 (Logical Shift Left)
LSR : 오른쪽으로 쉬프트, 빈자리 0 (Logical Shift Right)
ROR : 오른쪽으로 로테이션 (Rotation Right)
2. MOV
예)
MOV r0, [r1, r2] : r1+r2주소에 있는 값을 읽어서 r0에 저장한다.
MOV r0, r1, ROR #1 : r1을 오른쪽으로 한 비트만큼 rotation해서 r0에 저장한다.
3. ADD, SUB, AND, ORR
산술연산들.
예)
ADD r1, r2, #4 : r2에 4를 더해서 r1에 저장한다.
SUB r1, r1, #1 : r1에 1을 뺀다.
ORR r1, r2, r3, LSR r4 : r3을 오른쪽으로 쉬프트를 r4만큼 한 후, 그 결과를 r2와 OR하여 r1에 저장한다.
4. B, BL, BNE, BEQ, CMP
분기명령들.
예)
B there : 라벨이 there인 곳으로 무조건 분기한다. (Branch)
BEQ there : 플래그가 0이면 there로 분기한다. 아니면 다음 명령어를 수행한다. (Branch Equal)
BNE there : 플래그가 0이 아니면 there로 분기한다. 아니면 다음 명령어를 수행한다. (Branch Not Equal)
BL sub+ROM : 계산된 위치의 서브루틴을 호출한다. (Branch with Link)
CMP r1, #4 : r1이 4이면 플래그 0로 셋팅된다.
5. LDR, STR {레지스터}, {주소}, {증가량}
로드, 스토어 명령들.
LDRB : byte변수를 불러올 때
LDRH : short변수를 불러올 때
LDR : int변수를 불러올 때
STR도 마찬가지다.
예)
LDR r1, [r2, #16] : r2에 16byte만큼 더한 주소에서 정수형 값을 읽어와 r1에 저장한다.
STR r1, [r2], #4 : r2의 주소에 r1을 저장하고 난 후, r2를 4만큼 증가시킨다.
6. LDM, STM
로드, 스토어 명령들.(블록단위)
LDMFD : Load Multiple Full Descending / LDMIA : Load Multiple Increment After
STMFD : Store Multiple Full Descending / STMDB : Store Multiple Decrement Before
LDMED : Load Multiple Empty Descending / LDMIB : Load Multiple Increment Before
STMED : Store Multiple Empty Descending / STMDA : Store Multiple Decrement After
LDMFA : Load Multiple Full Ascending / LDMDA : Load Multiple Decrement After
STMFA : Store Multiple Full Ascending / STMIB : Store Mutiple Increment Before
LDMEA : Load Multiple Empty Ascending / LDMDB : Load Multiple Decrement Before
STMEA : Store Multiple Empty Ascending / STMIA : Store Multiple Increment After
728x90
'컴퓨터구조' 카테고리의 다른 글
컴퓨터 구조 정리 9번째 (0) | 2012.07.13 |
---|---|
컴퓨터 구조 정리 8번째 (0) | 2012.07.13 |
컴퓨터 구조 정리 6번째 (0) | 2012.07.13 |
컴퓨터 구조 정리 5번째 (0) | 2012.07.13 |
컴퓨터 구조 정리 4번째 (0) | 2012.07.13 |