RCR和ROR有什么区别?

12

我从术语中了解到,RCR会将位从右侧旋转到左侧,并取出进位位,而ROR则将位从右侧旋转到左侧,并取出右侧的位,但这是它们之间唯一的区别吗?如果是这样的话,这两个指令似乎执行相同的工作。请帮忙解答。谢谢。


2
一个使用了额外的位(进位),而另一个没有,正如你所说。这怎么能让它们“做同样的工作”呢? - Mat
2个回答

39

RCR 在循环移位中包括进位标志,因此它实际上是一个 N+1 位循环移位,而 ROR 不包括进位标志,因此它只是一个 N 位循环移位。

以下是来自 www.c-jump.com 的一些漂亮的示意图:

输入图像描述

输入图像描述


好的,我其实以为进位标志会在两个指令中都包含相同的东西。谢谢你的澄清。 - Foo

10

这两个指令都是将位从左向右旋转(其中最左边的位是MSB)。

RCR将进位标志位旋转到MSB,将LSB旋转到进位标志位。

ROR将LSB旋转到MSB,而不通过进位标志位。

+--> CF -->  MSB --> ... -> LSB --+
|                                 |      RCR
+---------------------------------+


+-> CF      +-> MSB --> ... -> LSB --+
|           |                        |      ROR
+------------------------------------+

RCR 将进位标志旋转到 MSB 和 LSB 到进位标志。如果我错了,LSB 首先应该移动到 CF,然后 CF 移动到 MSB 吗? - Foo
1
不,这就是重点。RCR 的有效工作方式类似于 N+1 位 ROR。因此,CF 的旧值转移到 MSB,LSB 的旧值转移到 CF。因此,在相同的初始条件下,两个指令将在 CF 中给出相同的结果,但 MSB 的新值可能会有所不同。 - Andrew Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接