RORX指令,在不影响标志的情况下向右旋转
我刚刚通过位操作指令,发现了一个我不明白的指令。请赐教。谷歌搜索似乎无法帮助我解决这个问题。
我发现的最有用的信息是指令patent,但这是一个非常长的阅读,我只是想知道这个指令。
答案 0 :(得分:3)
基本上,RORX
只是ROR
的一个版本,它不会影响标志,也允许指定一个目标寄存器(因此源不一定被覆盖 - 感谢Peter在指出这个的评论)。而且ROR
基本上是SHR
的一个版本,可以移动位,使得右边的位向左移回。
为了帮助您理解:有三种向右移动的指令。
SHR
,右移逻辑示例:
00110011 SHR 3
>>>00110011
00000110 "011" thrown away, "000" shifted in
---
11001100 SHR 3
>>>11001100
00011001 "100" thrown away, "000" shifted in
SAR
,右移算术示例:
00110011 SAR 3
>>>00110011
00000110 "011" thrown away, "000" shifted in
---
11001100 SAR 3
>>>11001100
11111001 "100" thrown away, "111" shifted in
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
(左移,只有两个,SHL
和ROL
,因为SAL
指令没有意义,因为它与{{SHL
没有区别1}}。)
对于“不影响标志”部分应该是什么意思的问题:大多数操作以某种方式设置或清除处理器标志(检查EFLAGS
寄存器),例如指示发生溢出,或结果为零。例如,这些标志可用于条件分支指令(诸如cmp
之类的操作设置标志,然后以下je
使用标志来确定比较结果是什么以及是否或不跳)。
ROR
指令通常也会设置一些标记,但RORX
会使它们保持不变。这个以及RORX
允许指定与源不同的目的地以及它只允许立即操作数的事实(感谢Peter Cordes,在评论中添加这个)是唯一的区别。 (当然,RORX
并非在所有x86处理器上都可用,ROR
是。{/ p>