2

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

现在,我想问一下,在英特尔处理器 (x86) 上使用普通 C 编译器(比如 gcc)无法完成(或非常无效)的 ASM 可以实现什么?

我听说过:

  • 实现互斥锁 - 需要直接的 CPU 支持(例如lock,,xchg
  • 花哨的位操作 - 找到最高/最低位设置为 1 ( bsf, bsr),测试一位是否为 1 ( bt, bts...),旋转一个值 ( ror, rol)
  • 中断屏蔽 ( sti, cli)
  • 访问特定于 CPU 的信息 ( cpuid)

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

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

4

1 回答 1

1

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

于 2012-09-07T14:57:09.997 回答