次の方法で共有


インライン アセンブリでの C 関数の呼び出し

Microsoft 固有の仕様

__asm ブロックを使用すると、C ライブラリ ルーチンを含む C 関数を呼び出すことができます。 printf ライブラリ ルーチンの呼び出しの例を次に示します。

// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp
// processor: x86
#include <stdio.h>

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
int main( void )
{
   __asm
   {
      mov  eax, offset world
      push eax
      mov  eax, offset hello
      push eax
      mov  eax, offset format
      push eax
      call printf
      //clean up the stack so that main can exit cleanly
      //use the unused register ebx to do the cleanup
      pop  ebx
      pop  ebx
      pop  ebx
   }
}

関数の引数はスタックで渡されるので、関数を呼び出す前に、必要な引数 (前の例では文字列ポインター) を単にプッシュします。 引数は逆順でプッシュされるため、目的の順序でスタックから取り出されます。 C ステートメントをエミュレートするには

printf( format, hello, world );

この例では、ポインターを worldhelloformat にその順序でプッシュして、printf を呼び出します。

Microsoft 固有の仕様はここまで

関連項目

インライン アセンブラー