我总是想知道's the purpose of the rotate instructions some CPUs have (ROL, RCL on x86, for example). What kind of software makes use of these instructions? I first thought they may be used for encryption/computing hash codes, but these libraries are written usually in C, which doesn'有哪些操作符映射到这些指令 .
有没有人找到他们的用途?为什么他们在指令集中添加了哪些内容?
5 回答
跨多个字的位移需要旋转 . 当SHL低位字时,高位位溢出到进位中 . 要完成操作,您需要在将进位输入低位时移位较高的字 . RCL是完成此任务的指令 .
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
如果我理解正确,你的问题是这样的:
"Given the fact that rotation instructions seem to be very special-purpose and not emitted by compilers, when are they actually used and why are they included in CPUs?" .
答案是双重的:
CPU不是专门用于执行C程序的 . 相反,它们被设计为通用机器,旨在使用各种不同的工具和语言来解决各种各样的问题 .
语言的设计者没有义务使用CPU中的每个操作码 . 事实上,大多数情况下,他们没有,因为一些CPU指令是高度专业化的,语言设计者没有迫切需要使用它们 .
有关按位运算符(以及它们与C编程的关系)的更多信息,请访问:http://en.wikipedia.org/wiki/Bitwise_operation
回到最初创建微处理器时,大多数程序都是用汇编编写的,而不是编译的 . 大多数CPU指令可能不是由编译器发出的(这是创建RISC的动力),但通常在硬件中相对容易实现 .
图形和加密中的许多算法都使用旋转,它们包含在CPU中使得在汇编中编写非常快的算法成为可能 .