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:


댓글 달기