ARM Development Suite v1.2
메모리 접근 명령어 주소지정 방식 간접 주소지정 방식 베이스 레지스터 기반 LDR r0, [r1, #-4] LDR r0, [r1, -r2] LDR r0, [r1, -r2, LSL #4] LDR r0, [r1, r2, LSL #4] LDR r0, [r1, r2, RRX]
메모리 접근 명령어 자동 증가/감소 기능 Pre-index Post-index ※ C++의 연산자 ++ <offset_mode> := [Rn, offset_value]! 일반 방식과 동일하게 메모리 접근 주소값 계산 후 접근 메모리 접근 후에 베이스 레지스터 값 update Post-index <offset_mode> := [Rn], offset_value 베이스 레지스터 값으로 메모리 접근 ※ C++의 연산자 ++
메모리 접근 명령어 LDR r0, [r1] STR r0, [r1, #4] LDR r0, [r1, #-4]! r0 ← MEM[r1] STR r0, [r1, #4] r0 → MEM[r1+4] LDR r0, [r1, #-4]! r0 ← MEM[r1 – 4], r1 ← r1 – 4 STR r0, [r1], #0xC r0 → MEM[r1], r1 ← r1 + 0xC r0 ← MEM[r1 + (r2<<2)] LDR r0, [r1, r2, LSL #2]
메모리 접근 명령어 접근 단위에 의한 분류 영-확장, 부호-확장 Word Half-word Byte LDR/STR Word LDRH/STRH Half-word LDRB/STRB Byte 영-확장, 부호-확장 LDRSH/LDRSB Signed-extension 32-bit 레지스터에 half-word로 읽어온 뒤에 남는 앞부분을 부호비트로 채움 LDRH/LDRB Zero-extension 남는 앞부분을 0으로 채움
Multiple Data Transfer Instructions LDM/STM 여러 개(최대 16개)의 레지스터의 내용을 한꺼번에 load/store 데이터 블록 복사 혹은 스택 동작에 이용 레지스터 리스트 순서에 관계없이 낮은 주소에 낮은 숫자의 레지스터, 높은 주소에 높은 숫자의 레지스터가 match
S bit - pc를 로드하는 LDM에 대해, SPSR을 같이 복구시킬지, 혹은 pc를 로드하지 않는 모든 LDM/STM에 대해 프로세서가 특권 모드에 있을 때, 유저 모드의 레지스터들만 사용할지
ARM 명령어 실습 CodeWarrior 에서 ’04’ New Project 생성 새로운 파일 생성 파일이름.s AREA ARMex, CODE, READONLY ENTRY start … stop B . END
ARM 명령어 실습 1 CodeWarrior 에서 ’04’ New Project 생성 새로운 파일 생성 01.s ADR R0, table1 LDR R1, [R0] LDRB R2, [R0] LDRSB R3, [R0] LDRH R4, [R0] LDRSH R5, [R0] STR R1, [R0, #4] STRB R2, [R0, #8] STRH R3, [R0, #12] ADD R7, R7, #0 table1 DCD 0x1234ABCD, 0x0, 0x0, 0x0
ARM 명령어 실습 2 CodeWarrior 에서 ’04_1’ New Project 생성 새로운 파일 생성 02.s ADR R0, table1 MOV R11, #4 MOV R12, #1 LDR R1, [R0, R11]! LDRB R2, [R0, R12, LSL #2] LDRSB R3, [R0], R11 LDRH R4, [R0], #-2 LDRSH R5, [R0] ADD R7, R7, #0 table1 DCD 0x0, 0x12345678, 0x87654321, 0x0
ARM 명령어 실습 3 CodeWarrior 에서 ’04_2’ New Project 생성 새로운 파일 생성 03.s LDR R11, =bsource LDR R12, =bdestination LDMIA R11!, {R0-R9} STMIA R12!, {R0-R9} LDMIA R11, {R0-R9} STMIA R12, {R0-R9} ADD R7, R7, #0 bsource DCD 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 bdestination DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ARM 명령어 실습 4 CodeWarrior 에서 ’04_3’ New Project 생성 새로운 파일 생성 04.s LDR R13, =freespace MOV R0, #10 MOV R2, #11 MOV R4, #12 MOV R6, #13 STMFD R13!, {R0, R2, R4, R6} LDMFD R13!, {R1, R3, R5, R7} ADD R7, R7, #0 tstack SPACE 256 freespace