2012-09-06 41 views
2

我对“何时使用ASM?”主题做了一些Google搜索研究。并找到了一些有用的信息。当然,人们提到了广泛的应用领域:HL代码的大小和速度优化,引导程序,嵌入式系统,驱动程序开发,逆向工程等。在C中使用x86内联汇编的好处?

现在,我想问一下用ASM可以实现哪些不能在Intel处理器(x86)上使用正常的C编译器(如gcc)完成(或高度无效)?

我听说过: - (如:lockxchg

  • 实现互斥CPU直接支持所需
  • 看中位操作 - 寻找最高/最低位设置为1(bsfbsr) ,如果测试一个位为1(btbts ...),旋转的值(rorrol
  • 中断屏蔽(sticli
  • 访问CPU特定信息(cpuid

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

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

+0

可能重复:http://stackoverflow.com/questions/143561/is-there-a-need-to-use-assembly - 这几天 –

+0

感谢您的链接。我已经通过了这个话题,找到了一些答案,但仍然想要更多:) –

回答

1

使用编译器不支持的CPU架构优势。当你的编译器不足以在你的计算上执行vectorizations以获得更好的性能时,你也可以使用汇编。考虑在具有AVX功能的CPU中使用单指令执行32个字符计算。

+0

哦,这对我来说有点新鲜有趣。谢谢! –