Partager via


Appel de fonctions C dans un assembly inline

Section spécifique à Microsoft

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

Les arguments de fonction étant passés sur la pile, il vous suffit d'effectuer un push des 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 ; ils sont donc dépilés dans l'ordre souhaité. Pour émuler l'instruction C

printf( format, hello, world );

l'exemple envoie les pointeurs vers world, hello et format, dans cet ordre-là, puis appelle printf.

FIN de la section spécifique à Microsoft

Voir aussi

Référence

Assembleur inline