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

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

Example 23. C++ で呼び出される関数の定義

struct S {           // ベースクラスまたは仮想関数が含まれていない
    S(int s) : i(s) { }
    int i;
}; extern "C" void cppfunc(S * p) {
// ASM から呼び出される C++ 関数の定義
// 本体は C++。リンケージのみが C。
    p->i += 5;
}

ARM アセンブリ言語では、C++ 関数の名前をインポートし、リンク付き分岐BL)命令を使用してその関数を呼び出します。

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

    AREA Asm, CODE
    IMPORT cppfunc         ; Asm から呼び出される 
                           ; C++ 関数の名前をインポートする
    EXPORT   f
f
    STMFD  sp!,{lr}
    MOV    R0,#2
    STR    R0,[sp,#-4]!; struct を初期化する
    MOV    R0,sp           ; 引数は struct へのポインタ
    BL     cppfunc         ; 'cppfunc' を呼び出して struct を変更できるようにする
    LDR    R0, [sp], #4
    ADD    R0, R0, R0,LSL #1
    LDMFD  sp!,{pc}
    END

Show/hide関連項目

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