Aufrufen von C-Funktionen im Inlineassembly
Microsoft-spezifisch
Ein __asm-Block kann C-Funktionen, einschließlich C-Bibliotheks routinen aufrufen.Im folgenden Beispiel wird die printf routine Bibliothek an:
// 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
}
}
Da Funktionsargumente auf dem Stapel übergeben werden, drücken Sie einfach die erforderlichen Argumente einen Zeichenfolgenzeiger mit dem vorhergehenden Beispiel, bevor die Funktion aufgerufen wird.Die Argumente werden in umgekehrter Reihenfolge abgelegt werden, sodass sie den Stapel in der gewünschten Reihenfolge ab.Um die C-Anweisung emulieren
printf( format, hello, world );
Das Beispiel legt Zeiger auf worldhello, und format, in dieser Reihenfolge und ruft dann printfan.
Microsoft ENDES bestimmten