ARM 주소 지정방식의 예는?

rain의 이미지

요즘 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.