ARM 주소 지정방식의 예는?
글쓴이: rain / 작성시간: 금, 2006/02/10 - 8:48오전
요즘 ARM System Developer's Guide를 보구 있는데요.
ARM instruction set이 제공하는 memory address를
계산하기 위한 mode에 관한 부분을 봤습니다.
아래와 같은 부분을 읽고는 c로 예제코드를 짜서 armcc -S 로
compile해보면 각각의 mode가 사용된 예가 나오겠다라고
생각하구 예제를 짜봤는데. ASM code가 생각했던 데로
나오질 않네요.
올바른 예제는 어떤 코드로 짜야 하는지 궁금합니다.
Quote:
프리 인덱스 모드는 데이터 구조 안의 요소들을 액세스하기 위해 사용된다. 포스트인덱스와 자동인덱스는 배열을 검색하는데 사용된다.
- ARM System Developer's Guide, 69p -
Example: C code
1 2 #include <stdio.h> 3 4 int 5 main() { 6 struct point { 7 int x; 8 int y; 9 }; 10 11 struct point line[2]; 12 13 line[1].x = 2; 14 15 printf("line[1].x = %d\n", line[1].x); 16 17 return 0; 18 } 19
Example: armcc -S로 compile된 ASM code
1 ; generated by ARM C Compiler, ADS1.2 [Build 842] 2 3 ; commandline [-O2 -S -IC:\ARM\ADSv1_2\INCLUDE] 4 CODE32 5 6 AREA ||.text||, CODE, READONLY 7 8 main PROC 9 STMFD sp!,{r3,lr} 10 MOV r1,#2 11 ADR r0,|L1.24| 12 BL _printf 13 MOV r0,#0 14 LDMFD sp!,{r3,pc} 15 |L1.24| 16 DCB "line" 17 DCB "[1]." 18 DCB "x = " 19 DCB "%d\n\0" 20 ENDP 21 22 23 24 EXPORT main 25 26 IMPORT _main 27 IMPORT __main 28 IMPORT _printf 29 IMPORT ||Lib$$Request$$armlib||, WEAK 30 31 KEEP ||BuildAttributes$$ARM_ISAv4$M$PE$A:L22$X:L11$S22$~IW$USESV 6$~STKCKD$USESV7$~SHL$OSPACE$PRES8|| 32 ||BuildAttributes$$ARM_ISAv4$M$PE$A:L22$X:L11$S22$~IW$USESV6$~STKCKD$USE SV7$~SHL$OSPACE$PRES8|| EQU 0 33 34 ASSERT {ENDIAN} = "little" 35 ASSERT {SWST} = {FALSE} 36 ASSERT {NOSWST} = {TRUE} 37 ASSERT {INTER} = {FALSE} 38 ASSERT {ROPI} = {FALSE} 39 ASSERT {RWPI} = {FALSE} 40 ASSERT {NOT_SHL} = {TRUE} 41 ASSERT {FULL_IEEE} = {FALSE} 42 ASSERT {SHL1} = {FALSE} 43 ASSERT {SHL2} = {FALSE} 44 END
Forums:
댓글 달기