windows开发,不同编译器的C中内嵌asm

1 首先是Windows的inline asm形式:

void function_name{
....
  __asm{
    MASM inline syntax;
  }
....
}

使用Windows的编译器,cl.exe来编译。默认使用的MASM汇编语法,使用ml.exe进行编译。具体语法查看MSDN

2 如果使用Dev-C++编译器进行编译,查看安装目录,里面全是gcc.exe, as.exe默认使用gnu的标准,即
inline asm的形式为:

void c_func();
int main(int argc, char* argv[])
{
printf("%d : %s\n", argc, argv[0]);
asm("mov %0, %%eax\n\t"
"call %%eax"
:
:"m" (c_func));

return 0;
}

void c_func(){
printf("This is in C function\n");
}

gnu使用AT&T汇编语法,并且在inline时候会有些变动。上述是inline的扩展形式

3 在写用户态应用程序时候,如果用到inline asm用哪一个编译器编译,就把代码写成哪个标准。
然而在写内核态程序,因为都是调用微软的build。。当然要写成Windows的语法形式。。

posted @ 2011-12-05 11:46  Jack204  阅读(699)  评论(0编辑  收藏  举报