Assembly ASM ROR做什么?

Assembly ASM ROR做什么?,assembly,Assembly,ROR或ROL在装配中做什么? 例如,ROR 110100110将生产什么 我知道这是一个“按位旋转”,但我不知道这意味着什么,还没有找到一个简单的例子来说明它的作用 ROR - Rotate Right ROL - Rotate Left 在rotate指令中,从寄存器末端滑出的位被反馈到空间中 罗尔 罗尔 取决于指令集。我想你明白右转意味着什么 110100110 右移一位意味着位0来自位1,位1来自位2,依此类推。但关键的问题是,当钻头从一端脱落时,钻头会去哪里,而另一端会被什么填充 1

ROR或ROL在装配中做什么? 例如,ROR 110100110将生产什么

我知道这是一个“按位旋转”,但我不知道这意味着什么,还没有找到一个简单的例子来说明它的作用

ROR - Rotate Right
ROL - Rotate Left
在rotate指令中,从寄存器末端滑出的位被反馈到空间中

罗尔

罗尔


取决于指令集。我想你明白右转意味着什么

110100110

右移一位意味着位0来自位1,位1来自位2,依此类推。但关键的问题是,当钻头从一端脱落时,钻头会去哪里,而另一端会被什么填充

110100110
X11010011
XX1101001
XXX110100
XXXX11010
因此,从人类的角度来说,右移位会向右移动,我们将数字右移,最重要的在左边,最不重要的在右边

有时你会看到逻辑和算术右移,等等。C编程语言假设零移入,你会看到一些这样做的指令集,上面的xxs将是零。某些指令集还具有进位移入的功能。还有一些是算术移位,在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旋转到进位


有些指令集可以使每条指令旋转一位,有些指令集可以指定旋转多少位的参数。请注意上面序列中倒数第二个值。几乎全方位旋转与向左旋转相同。某些指令集其中一个旋转实际上是一个psuedo指令,实现为n位减去旋转量。N-1的向右旋转与向左旋转相同1种事情为什么要浪费操作码。

按操作数大小旋转多远?@harold模拟考试中的示例问题没有说明:在8位处理器上执行以下代码后,寄存器AL将包含十六进制数[AL]寄存器BL将包含十六进制数[BL]。MOV AL,55 MOV BL,CC ROR ALOk,因此在1和8位上,AL不能是110100110,显然它是已知的0x55 01010101,因此它将成为0xAA 10101010,x86 insn ref手册链接自。它精确地描述了每一条指令的具体功能,直到哪一位到达哪里。但是ROR只是简单的右转,进位是RCR,eax是寄存器的32位版本。这是特定于指令集/体系结构的。有些体系结构有单独的指令,在进位期间循环。当他们这样做时,我不知道他们中有谁使用ROR。ROR,除非缺少旋转进位,否则它总是旋转到最高有效位。
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