我发现与二进制/双态特性相反,x86 CPU在处理诸如SHR,BT,BTR,ROL等类似的二进制操作指令时非常慢.
例如,我从某个地方读取它,比特移位/旋转超过1个位置被认为是慢的(具有高延迟,性能损失和那些可怕的东西).当操作数在内存中时更糟糕(不是内存双态外设吗?)
shl eax,1 ;ok
shl eax,7 ;slow?
Run Code Online (Sandbox Code Playgroud)
那么是什么让他们变慢?具有讽刺意味的是,像CPU一样的二进制机器在进行这种操作时应该很慢.它给人的印象是二进制CPU正在将位移位困难!
编辑:现在在手册中第二次看SHL条目后,它确实涉及一些沉重的微代码逻辑!
来自英特尔的vol.2手册shl ...
Operation
TemporaryCount = Count & 0x1F;
TemporaryDestination = Destination;
while(TemporaryCount != 0) {
if(Instruction == SAL || Instruction == SHL) {
CF = MSB(Destination);
Destination = Destination << 1;
}
//instruction is SAR or SHR
else {
CF = LSB(Destination);
if(Instruction == SAR) Destination = Destination / 2; //Signed divide, rounding toward negative infinity
//Instruction is SHR
else Destination = Destination / 2; //Unsigned divide …Run Code Online (Sandbox Code Playgroud)