5.2. アセンブリコードから C グローバル変数へのアクセス

グローバル変数には、その変数のアドレスを使用して間接的にしかアクセスすることできません。グローバル変数にアクセスするには、IMPORT ディレクティブを使用してグローバル変数をインポートし、アドレスをレジスタにロードします。そのグローバル変数には、その型によって、ロード命令およびストア命令を使用してアクセスできます。

符号なし変数には、以下の命令を使用します。

符号付き変数では、LDRSBLDRSH など、上記の命令と等価な符号付き命令を使用します。

8 ワード未満の小さな構造体全体には、LDM 命令および STM 命令を使用してアクセスできます。構造体の各メンバには、適切なタイプのロード命令またはストア命令を使用してアクセスできます。各メンバにアクセスするには、構造体の開始位置からメンバのオフセットを把握しておく必要があります。

Example 5.1 では、整数のグローバル変数 globvar のアドレスを r1 にロードし、そのアドレスに格納された値を r0 にロードして 2 を加算してから、その新しい値を globvar に返します。

Example 5.1. グローバル変数へのアクセス

    PRESERVE8

    AREA     globals,CODE,READONLY

    EXPORT    asmsubroutine
    IMPORT    globvar

asmsubroutine
    LDR  r1, =globvar   ; read address of globvar into
                        ; r1 from literal pool
    LDR  r0, [r1]
    ADD  r0, r0, #2
    STR  r0, [r1]
    BX   lr
    END

ARM または Thumb のコードで使用できる命令の詳細については、RealView Compilation Tools v3.0 Assembler Guideを参照して下さい。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential