在C中使用x86的内联汇编的好处?

时间:2012-09-06 08:45:33

标签: x86 inline-assembly

我已经对“何时使用ASM?”这一主题进行了一些谷歌搜索研究。并找到了一些有用的信息。当然人们提到了广泛的应用领域:HL代码的大小和速度优化,引导加载程序,嵌入式系统,驱动程序开发,逆向工程等。

现在,我想问一下,在英特尔处理器(x86)上使用普通的C编译器(比如gcc),ASM无法实现(或效率很高)?

我听说过:

  • 实现互斥锁 - 需要直接的CPU支持(例如lockxchg
  • 花式位操作 - 找到最高/最低位设置为1(bsfbsr),测试位是否为1(btbts ... ),旋转值(rorrol
  • 中断屏蔽(sticli
  • 访问特定于CPU的信息(cpuid

有些人建议在ASM中重写标准记忆功能(例如memcpy())。我认为现在编译器已经以最佳方式实现了这些操作,但也许我错了?

有人还提到了我不明白的int / float转换。我的意思是手动执行这样的转换效率会更高效吗?

1 个答案:

答案 0 :(得分:1)

利用编译器不支持的CPU架构优势。当你的编译器不好时,你需要在计算上执行vectorizations以获得更好的性能,你也可以使用程序集。考虑使用支持AVX的CPU中的单个指令进行32个字符计算。