【inline】内联汇编在不同平台下编译的注意事项

本文详细介绍了内联汇编在Windows和Linux平台上的使用情况,包括GCC和icc编译器的支持特性,以及Intel格式和AT&T格式的内联汇编语法差异。文章还提到了内联汇编在特定体系结构和高性能代码编写中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Date: 2018.10.23

1、参考

https://blog.youkuaiyun.com/zhangyifei216/article/details/49788863
https://blog.youkuaiyun.com/hongbochen1223/article/details/45102653

2、内联汇编简介

    在Linux内核代码中有一部分是使用汇编语言编写的,尤其是与特定体系结构相关的代码和一些对性能影响很大的代码都是使用汇编语言进行编写的,那么GCC为了可以在C语言中来编写汇编代码,提供了内联汇编的功能,可以在C代码中直接内嵌汇编语言,大大方便了程序设计。

3、内联汇编的编译

(1) Windows平台(VS):

  • 默认编译器(cl.exe)
    1)不支持x64下的内联汇编
    2)支持win32下的内联汇编,但是需要使用Intel格式的内联汇编,并且内联汇编基本语法格式为__asm{ }。
  • icc编译器(vs中按照Intel C++ Compiler XE编译器)
    1)支持x64下的内联汇编
    2)支持win32下的内联汇编

(2) Linux平台:

  • 默认编译器(gcc)
    1)支持32位以及64位的内联汇编,但是需要AT&T格式的内联汇编,且内联汇编基本语法格式为asm(…); 或 asm volatile(…);
  • icc编译器
    1)支持32位和64位下的内联汇编。icc编译器支持intel assemly syntax和 GNU-style inline(AT&T)语法。
4、注意事项

(1)Linux平台下GNC C编译器一般使用AT&T格式,当然也可以使用Intel格式,asm(…);
(2)Windows平台下固定前缀asm后面用花括号{} ,Linux平台下固定前缀asm后面用圆括号();
(3)固定前缀asm的具体格式与系统和平台有关;
(4)Intel汇编格式和AT&T汇编格式的区别主要在于寄存器和立即数前缀、操作数的方向、内存单元操作数的格式、间接寻址方式格式等。


THE END!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的鲲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值