ROR或ROL在大会中做什么? 例如,ROR 110100110会产生什么?
我理解它是一个按位旋转'但我不知道这意味着什么,还没有找到它的作用的简单例子。
答案 0 :(得分:3)
取决于指令集。我假设您了解右移意味着什么
110100110
右移一位意味着位0来自位1位1来自位2,依此类推。虽然关键问题在于,当它们从一端掉下来并且在另一端填充什么时,这些位会发生什么变化呢?
110100110
X11010011
XX1101001
XXX110100
XXXX11010
所以从人类的角度来看右移这些位是正确的,我们右边的数字是最重要的,而左边是最重要的数字。
有时您会看到逻辑与算术右移等等.C编程语言假定零移位,您将看到一些指令集,上面的XXes将为零。一些指令集也有一个特征,其中Carry位被移入。有些算术移位到msbit移入的位置,在你的情况下是1。
旋转意味着从一端掉落的位旋转并在另一端移位。
110100110
X110100110
XX110100110
XXX110100110
所以你可能会发现一个实现,其中移出的位是在另一端移位的位。第一个班次零点从结尾掉落,所以进来的比特将是零。两位移位10输出,所以10进来,依此类推:
110100110
011010011 0
101101001 10
110110100 110
您经常会看到旋转中使用的进位位
110100110 C
C11010011 0
0C1101001 1
10C110100 1
110C11010 0
0110C1101 0
00110C110 1
100110C11 0
0100110C1 1
10100110C 1
110100110 C
所以假设你有一个包含你指定的9位的9位寄存器,并且ROR通过进位旋转,那么你得到上面的单位旋转将msbit中的进位标志中的内容放入寄存器中的其他位右移一位并且lsbit旋转到Carry。
某些指令集为每条指令提供一位旋转,有些指令允许您指定旋转位数的参数。注意上面序列中的倒数第二个值。几乎所有的旋转方向与向左旋转相同。一些指令集其中一个旋转实际上是一个伪指令,实现为n位减去旋转量。 N-1的右旋转与左旋转相同,为什么浪费操作码。
答案 1 :(得分:2)
ROR - Rotate Right
ROL - Rotate Left
在旋转指令中,从寄存器末尾滑出的位被反馈到空格中。
<强> ROR 强>
mov eax,0xA //the value in eax is 0000 0000 0000 0000 0000 0000 0000 1010
ror eax,2 // now eax will be 1000 0000 0000 0000 0000 0000 0000 0010
<强> ROL 强>
mov eax,0xA //the value in eax is 0000 0000 0000 0000 0000 0000 0000 1010
rol eax,2 // now eax will be 0000 0000 0000 0000 0000 0000 0010 1000