Chiamare le funzioni C nell'assembly inline

Sezione specifica Microsoft

Un blocco __asm può chiamare le funzioni C, incluse le routine di libreria C. Nell'esempio seguente viene chiamata la routine di libreria 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
   }
}

Poiché gli argomenti di funzione vengono passati nello stack, si inseriscono semplicemente gli argomenti necessari, puntatori di stringa nell'esempio precedente, prima di chiamare la funzione. Gli argomenti sono inseriti in ordine inverso, pertanto si staccano dallo stack nell'ordine desiderato. Per emulare l'istruzione C

printf( format, hello, world );

l'esempio inserisce i puntatori a world, hello e format, in questo ordine, quindi chiamare printf.

Fine sezione specifica Microsoft

Vedi anche

Assembler inline