文章转自 http://www.mcany.cn/article/295.htm
博主 没落的残阳
这节来继续讲解移位指令---循环移位指令,今天我们学到的这两个指令比较有用,通常我们可以用来调换一个寄存器中的数据。。 以后我们学到win32汇编的时候,你就知道我们现在学习这些指令集的用处了。。
循环移位指令
1.循环左移
指令名称 ROL(rotate left)
介绍:ROL指令在向左移动一位后,把最高位同时复制到进位标志和最低位中。其指令格式与SHL相似。
循环移位和逻辑移位不同的是前者不会丢失任何数据位,也就是每次移出高位就会补到最低位上。
举例1:
al = 26h
al = 00100110B
那么 执行ROL al, 1
al = 01001100 ;因为循环移位最高位移动到最低位,所以此时al = 01001100B
举例2:
al = 26h
al = 00100110B
那么执行ROL al, 4
al = 01100010B ;因为循环移位每次移位后最高位就会移动到最低位,移动4次后,正好是将其之前的高4位移动到了低4位上,很简单所以我们一般用这个指令来交换数据。
2.循环右移
指令名称 ROR指令
指令介绍:ROR指令在向右移动一位后,把最低位同时复制到进位标志位和最高位中。指令的格式于shl指令相同。
我们的ROR指令和ROL一样,同样不会丢失数据位,每次移出的最低位补到最高位上。
举例1
al = 26h
al = 00100110B
执行:ROR al, 1
al = 00010011b ;很简单,其实移位后将之前的移出的最低位补到最高位上。
举例2:
al = 32h
al = 00110010B
执行 ROR al, 4
al = 00100011B
其实我们在交换数据的时候(限定每个数据的1/2),用ROL和ROR是一样的。前者是将前1/2转移到后1/2,而后者是将后1/2转移到前1/2。 所以是一样的。。