C++ からのアセンブリ言語の呼び出し

アセンブリ言語ルーチンを C++ から呼び出すには、EXPORT ディレクティブを使用して関数シンボルをエクスポートする必要があります。

Example 19. アセンブリ言語で記述された関数の定義

    PRESERVE8
    AREA Asm, CODE
    EXPORT asmfunc
asmfunc                ; C++ から呼び出される
    LDR R1, [R0]       ; Asm 関数の定義
    ADD R1, R1, #5
    STR R1, [R0]
    BX  lr
    END

アセンブリ言語ルーチンを C++ から呼び出すには、extern "C" を使用して宣言します。

Example 20. C++ 言語からのアセンブリ言語の呼び出し

struct S {        // ベースクラスまたは
                  // 仮想関数が含まれていない
    S(int s) : i(s) { }
    int i;
}; extern "C" void asmfunc(S *);   // 呼び出される Asm 関数を
                                // 宣言する
int f() {
    S s(2);                     // 's' を初期化する
    asmfunc(&s);                // 'asmfunc' を呼び出して
                                // 's' を変更できるようにする
    return s.i * 3;
}

Show/hide関連項目

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