非機密扱い | ![]() | ARM DUI0471JJ | ||
| ||||
ホーム > C、C++、およびアセンブリ言語の混用 > C++ からのアセンブリ言語の呼び出し |
アセンブリ言語ルーチンは、アセンブリ関数シンボルをエクスポートして C++ で extern "C"
として宣言することによって呼び出すことができます。
アセンブリ言語ルーチンを C++ から呼び出すには、
以下に示すように、EXPORT
ディレクティブを使用して関数シンボルをエクスポートする必要があります。
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"
を使用して宣言します。
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; }