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

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

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

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

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

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

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

    PRESERVE8
    AREA     globals,CODE,READONLY
    EXPORT    asmsubroutine
    IMPORT    globvar
asmsubroutine
    LDR  R1, =globvar   ; globvar のアドレスを R1 に読み込む
    LDR  R0, [R1]       ; globvar の値をロードする
    ADD  R0, R0, #2
    STR  R0, [R1]       ; 新しい値を globvar に格納する
    BX   lr
    END

Show/hide関連項目

概念

『アセンブラの使用』

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0471EJ
Non-ConfidentialID081711