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的语法形式。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值