0

我正在从《汇编语言艺术》第 2 版这本书中学习 HLA 汇编。我刚开始学习 shr 和 shl 指令,我想知道是否移动较大的量会比移动较小的量需要更多的时间。shr(1,dest) 与 shr(7,dest)。

如果说明的语法错误,我很抱歉。

4

1 回答 1

1

http://agner.org/optimize/有 x86 CPU 的指令时序和微架构指南。

在最近的 AMD 和 Intel 上,以立即(编译时间常数)计数进行移位和旋转是单周期延迟。

除 1 以外的任何计数的循环进位都很慢,但可能是恒定时间。(依赖于数据的时序使得乱序执行依赖跟踪更加棘手,所以我认为它们只是取最大值。

另一个奇怪的事情:显然 IvyBridge / Haswell 为短格式ROL / ROR旋转 1 操作码采取了额外的 uop,因此与imm8计数为 1 的普通操作码相比,吞吐量是一半。

re: HLA: C 和 C++ 编译器现在对内在函数有很好的支持(变成内联指令的函数)。HLA 已经没有那么多用例了,我想我记得读过。根据一些我不记得的消息来源(抱歉>.<),这些天你不妨学习普通的 asm。很多时候,您可以通过 C/C++ 中的内在函数使用向量指令(或位操作,如 popcount)来获得加速。

如果您在学习 HLA 时玩得很开心,并且认为它很有用,那么祝您好运。

于 2015-09-07T06:23:33.473 回答