调用内联程序集的C函数
Microsoft 专用
__asm 块可以调用 C 函数,包括 C 库实例。下面的示例调用 printf 库 (dll) 例程:
// 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
}
}
由于函数参数在堆栈上传递,则在调用函数之前驱动器需要的参数 —字符串指针,在前面的示例中 )。参数以相反顺序驱动器,因此,在结束堆栈按所需顺序。模拟 C 语句
printf( format, hello, world );
该示例然后指向 world、 hello和 format,按照这个顺序,然后调用 printf。
特定于 Microsoft 的结尾