我对“何时使用 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 转换。我的意思是手动执行这种转换是否也更有效?