第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位。第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位:
clc ; CF = 0
mov bl, 88h ; CF,BL = 0 1000100Ob
rcl bl, 1 ; CF,BL = 1 00010000b
rcl b1, 1 ; CF,BL = 0 00100001b
从进位标志位恢复位
RCL 可以恢复之前移入进位标志位的位。下面的例子把 testval 的最低位移入进位标志位,并对其进行检查。如果 testval 的最低位为 1,则程序跳转;如果最低位为 0,则用 RCL 将该数恢复为初始值:
.data
testval BYTE 01101010b
.code
shr testval, 1 ; 将lsb移入进位标志位
jc exit ; 如果该标志位置 1,则退出
rcl testval, 1 ; 否则恢复该数原值
RCR 指令
RCR(带进位循环右移)指令把每一位都向右移,进位标志位复制到 MSB,而LSB 复制到进位标志位:
从上图来看,RCL 指令将该整数转化成了一个 9 位值,进位标志位位于 LSB 的右边。