컴퓨터구조

컴퓨터 구조 정리 7번째

정망스 2012. 7. 13. 14:56
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
728x90