3.12 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++ 言語からのアセンブリ言語の呼び出し

アセンブリ言語ルーチンを 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; }
関連する概念
3.11 C++ からの C の呼び出し
非機密扱いPDF file icon PDF 版ARM DUI0471JJ
Copyright © 2010-2013 ARM.All rights reserved.