RORX指令有什么作用?

时间:2016-07-12 03:58:04

标签: x86

来自wikipedia

  

RORX指令,在不影响标志的情况下向右旋转

我刚刚通过位操作指令,发现了一个我不明白的指令。请赐教。谷歌搜索似乎无法帮助我解决这个问题。

我发现的最有用的信息是指令patent,但这是一个非常长的阅读,我只是想知道这个指令。

1 个答案:

答案 0 :(得分:3)

基本上,RORX只是ROR的一个版本,它不会影响标志,也允许指定一个目标寄存器(因此源不一定被覆盖 - 感谢Peter在指出这个的评论)。而且ROR基本上是SHR的一个版本,可以移动位,使得右边的位向左移回。

为了帮助您理解:有三种向右移动的指令。

1)SHR,右移逻辑

  • 在右侧,将位移到必杀技(切断)
  • 在左侧,零变化
    • 因此,SHR负值将使它们为正,因为符号位移开并被零替换。)

示例:

00110011 SHR 3

>>>00110011
00000110         "011" thrown away, "000" shifted in

---

11001100 SHR 3

>>>11001100
00011001         "100" thrown away, "000" shifted in

2)SAR,右移算术

  • 在右侧,将位移到必杀技(切断)
  • 在左侧,根据原始值的符号位(最高有效位)的值移位1或0
    • 因此,SAR-ing负值将保持其符号为负因为符号位保留并用于填充新位置
    • 对于正值(符号位为零),SAR将与SHR
    • 相同
    • 这种转变称为“算术”,因为它相当于除以2 ^ X,其中X是你要转移的位数

示例:

00110011 SAR 3

>>>00110011
00000110         "011" thrown away, "000" shifted in

---

11001100 SAR 3

>>>11001100
11111001         "100" thrown away, "111" shifted in

3)ROR,向右旋转

  • 在右侧,将位移回左侧
  • 在左侧,将右侧“跌倒”的位移位

示例:

00110011 ROR 3

>>>00110011
01100110         "011" rotated around, shifted out right and back in left

---

11001100 ROR 3

>>>11001100
10011001         "100" rotated around, shifted out right and back in left

(左移,只有两个,SHLROL,因为SAL指令没有意义,因为它与{{SHL没有区别1}}。)

对于“不影响标志”部分应该是什么意思的问题:大多数操作以某种方式设置或清除处理器标志(检查EFLAGS寄存器),例如指示发生溢出,或结果为零。例如,这些标志可用于条件分支指令(诸如cmp之类的操作设置标志,然后以下je使用标志来确定比较结果是什么以及是否或不跳)。

ROR指令通常也会设置一些标记,但RORX会使它们保持不变。这个以及RORX允许指定与源不同的目的地以及它只允许立即操作数的事实(感谢Peter Cordes,在评论中添加这个)是唯一的区别。 (当然,RORX并非在所有x86处理器上都可用,ROR是。{/ p>