我正在从书中学习HLA汇编,汇编语言艺术,第2版。我刚开始学习shr和shl指令,我想知道是否换了一个较大的数量比移动较小的数量需要更多的时间。 shr(1,dest)vs shr(7,dest)。
如果说明的语法错误,我很抱歉。
答案 0 :(得分: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,并认为它很有用,那么祝你好运。