В чем разница между RCR и ROR?

Я понимаю из условия, что RCR будет вращать бит справа налево, принимая - чуть из переноски пока ROR будет вращать бит справа налево, принимая бит справа но это единственное различие между ними? Если это так, то обе инструкции, похоже, выполняют одну и ту же работу. Пожалуйста, помогите. Спасибо

2 ответов


RCR включает флаг переноса во вращении, поэтому он эффективно вращается на N+1 бит, тогда как ROR не включает флаг переноса, поэтому он просто вращается на N бит.

некоторые хорошие диаграммы из www.c-jump.com:

enter image description here

enter image description here


обе инструкции вращают биты слева направо (где левый бит является MSB).

RCR поворачивает флаг переноса в MSB и LSB к флагу переноса.

ROR поворачивает LSB к MSB без прохождения флага переноса.

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


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