Gra*_*Lup 29 x86 assembly cpu-architecture machine-instruction
我总是想知道一些CPU具有旋转指令的目的是什么(例如,ROL,x86上的RCL).什么样的软件使用这些说明?我首先想到它们可能用于加密/计算哈希码,但这些库通常用C编写,它没有映射到这些指令的运算符.
有没有人找到他们的用途?为什么他们在指令集中添加了哪些内容?
Nie*_*jou 25
跨多个字的位移需要旋转.当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对于以(最终)非破坏性的方式逐位检查值非常有用.它们还可用于分流位掩码,而不会引入垃圾位.
dth*_*rpe 16
旋转移位操作码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
| 归档时间: |
|
| 查看次数: |
27688 次 |
| 最近记录: |