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

以下の例は、アセンブラコードから呼び出される C 関数です。

Example 15. C 言語における関数の定義

int g(int a, int b, int c, int d, int e)
{
    return a + b + c + d + e;
}

この C 関数をアセンブリ言語から呼び出すには、g 関数シンボルを IMPORT ディレクティブと共に指定します。

Example 16. アセンブリ言語の呼び出し

    ; int f(int i) { return g(i, 2*i, 3*i, 4*i, 5*i); }
    PRESERVE8
    EXPORT f
    AREA f, CODE, READONLY
    IMPORT g           ; i は R0 内
    STR lr, [sp, #-4]!; lr を保持する
    ADD R1, R0, R0     ; 2*i(第 2 パラメータ)を計算する
    ADD R2, R1, R0     ; 3*i(第 3 パラメータ)を計算する
    ADD R3, R1, R2     ; 5*i を計算する
    STR R3, [sp, #-4]!; スタックの第 5 パラメータ
    ADD R3, R1, R1     ; 4*i(第 4 パラメータ)を計算する
    BL g               ; C 関数に分岐する
    ADD sp, sp, #4     ; 第 5 パラメータを削除する
    LDR pc, [sp], #4   ; 復帰
    END

Show/hide関連項目

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