Partager via


L'appel C s'exécute dans un assembly inline

Spécifique à Microsoft

Un bloc d' __asm peut appeler des fonctions C, y compris les routines de bibliothèque C.l'exemple suivant appelle la routine de bibliothèque d' 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
   }
}

Étant donné que les arguments de fonction sont passés sur la pile, vous poussez simplement les arguments nécessaires - pointeurs de chaîne, dans l'exemple précédent - avant d'appeler la fonction.Les arguments font l'objet d'un push dans l'ordre inverse, de sorte qu'ils se dégagent la pile dans l'ordre souhaité.Pour émuler l'instruction C

printf( format, hello, world );

l'exemple envoie des pointeurs vers world, à hello, et à format, dans cette commande, puis appelle printf.

détail de FIN Microsoft

Voir aussi

Référence

Assembleur inline