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