C および C++ の組み込みアセンブラ構文

組み込みアセンブリ言語関数定義は、関数修飾子 __asm(C および C++)または asm(C++)によってマークされ、以下に対して使用できます。

__asm または asm で宣言される関数は引数を取ることができ、型を返します。これらの関数は、C や C++ の通常の関数と同じように、C や C++ から呼び出されます。組み込みアセンブリ言語関数の構文は以下のとおりです。

__asm return-type function-name(parameter-list)
{    
  // ARM/Thumb/Thumb-2 アセンブラコード
  instruction{;comment}
  ... 
  instruction
}

Note

パラメータリスト内に引数名を指定することができますが、これらの引数名は組み込みアセンブリ関数の本体内では使用できません。例えば、以下の関数では、関数の本体で整数 i が使用されていますが、アセンブリではこの整数は無効となります。

__asm int f(int i)
{
    ADD i, i, #1 // エラー
}

例えば、このような場合は、i の代わりに r0 を使用することができます

Example 41 に、まだ完全に最適化されていない組み込みアセンブラルーチンとしての文字列コピールーチンを示します。

Example 41. 組み込みセンブラを使用した文字列のコピー

#include <stdio.h>
__asm void my_strcpy(const char *src, char *dst)
{
loop
      LDRB  r2, [r0], #1
      STRB  r2, [r1], #1
      CMP   r2, #0
      BNE   loop
      BX    lr
}
int main(void)
{
    const char *a = "Hello world!";
    char b[20];
    my_strcpy (a, b);
    printf("Original string:'%s'\n", a);
    printf("Copied   string:'%s'\n", b);
    return 0;
}

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811