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

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

Example 13. アセンブリ言語を使用したストリングコピーサブルーチン

    PRESERVE8
    AREA    SCopy, CODE, READONLY
    EXPORT strcopy
strcopy               ; R0 はデスティネーション文字列を指す
                      ; R1 はソース文字列を指す
    LDRB R2, [R1],#1  ; バイトをロードし、アドレスを更新する
    STRB R2, [R0],#1  ; バイトを格納し、アドレスを更新する
    CMP  R2, #0       ; NULL 終端文字をチェックする
    BNE  strcopy      ; NULL でない場合は続行する
    BX   lr           ; 復帰
    END

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

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

#include <stdio.h> extern void strcopy(char *d, const char *s);
int main()
{   const char *srcstr = "First string - source ";
    char dststr[] = "Second string - destination ";
/* dststr は、変更対象の配列 */
    printf("Before copying:\n");
    printf("  %s\n  %s\n",srcstr,dststr);
    strcopy(dststr,srcstr);
    printf("After copying:\n");
    printf("  %s\n  %s\n",srcstr,dststr);
    return (0);
}

Show/hide関連項目

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