Freigeben über


Aufrufen von C-Funktionen im Inlineassembly

Microsoft-spezifisch

Ein __asm-Block kann C-Funktionen, einschließlich C-Bibliotheks routinen aufrufen.Im folgenden Beispiel wird die printf routine Bibliothek an:

// 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
   }
}

Da Funktionsargumente auf dem Stapel übergeben werden, drücken Sie einfach die erforderlichen Argumente einen Zeichenfolgenzeiger mit dem vorhergehenden Beispiel, bevor die Funktion aufgerufen wird.Die Argumente werden in umgekehrter Reihenfolge abgelegt werden, sodass sie den Stapel in der gewünschten Reihenfolge ab.Um die C-Anweisung emulieren

printf( format, hello, world );

Das Beispiel legt Zeiger auf worldhello, und format, in dieser Reihenfolge und ruft dann printfan.

Microsoft ENDES bestimmten

Siehe auch

Referenz

Inlineassembler