Dela via


Anropa C-funktioner i infogad sammansättning

Microsoft-specifik

Ett __asm block kan anropa C-funktioner, inklusive C-biblioteksrutiner. I följande exempel anropas biblioteksrutinen 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
   }
}

Eftersom funktionsargument skickas på stacken skickar du bara de argument som behövs – strängpekare i föregående exempel – innan du anropar funktionen. Argumenten skickas i omvänd ordning, så de kommer från stacken i önskad ordning. Emulera C-uttrycket

printf( format, hello, world );

exemplet skickar pekare till world, hellooch format, i den ordningen och anropar printfsedan .

Avsluta Microsoft Specifik

Se även

Inlinjeassembler