循环指令的目的是什么(x86上的ROL,RCL)?

我总是想知道一些CPU具有的旋转指令的目的是什么(例如,在x86上的ROL,RCL)。 什么样的软件使用这些说明? 我首先想到它们可能用于加密/计算哈希码,但这些库通常是用C编写的,它没有映射到这些指令的操作符。
有没有人找到他们的用途? 为什么他们添加到指令集?


对于多个单词的位移,需要旋转。 当您将低位字SHL溢出时,高位会溢出进位。 要完成操作,需要在将进位移入低位时移位较高的字。 RCL是完成这个任务的指令。

                      High word             Low word         CF
Initial          0110 1001 1011 1001   1100 0010 0000 1101    ?
SHL low word     0110 1001 1011 1001   1000 0100 0001 1010    1
RCL high word    1101 0011 0111 0011   1000 0100 0001 1010    1 

ROL和ROR对于以最终非破坏性的方式逐位检查值很有用。 它们也可以用来分流一个位掩码而不引入垃圾位。


旋转移位操作码ROL,RCL,ROR,RCR)几乎专门用于散列和CRC计算。 他们很神秘,很少使用。

移位操作码(SHL,SHR)用于快速乘以2的幂乘,或将低字节移入大寄存器的高字节。

ROL和SHL之间的区别是ROL占用高位,并将它滚动到低位位置。 SHL将高位抛出并用零填充低位位置。


ROR ROL是“历史性”的,但在许多方面仍然有用。

在80386(和操作码BT)之前,ROL将被用于测试一点点(SHL不会传播到进位标志) - 实际上在8088,ROR / ROL每次只会移位1位! !

此外,如果您想在不丢失已经移出示波器的位的情况下进行一种方式然后以另一种方式进行移位,则可以使用ROR / ROL而不是SHR / SHL

链接地址: http://www.djcxy.com/p/12553.html

上一篇: What's the purpose of the rotate instructions (ROL, RCL on x86)?

下一篇: LEA instruction?