ROL是循环左移指令,它们移出的位不仅要进入CF,而且还要填补空出的位.而RCL是带进位的循环左移指令,用原CF的值填补空出的位,移出的位再进入CF.两者相近,但又不同,容易混淆.
AX循环左移4位,结果AX=6785H
DX循环左移4位,结果DX=2345H
关键点:RCL DX,1的执行结果,受ROL AX,1的影响;而ROL AX,1的执行结果,不受RCL DX,1的影响.
移位过程如下:
第1次执行循环体
ROL AX,1
0101011001111000→1010110011110000,CF=0
RCL DX,1
0001001000110100→0010010001101000,第0位的0=CF(ROL AX,1产生的)
第2次执行循环体
ROL AX,1
1010110011110000→0101100111100001,CF=1
RCL DX,1
0010010001101000→0100100011010001,第0位的1=CF
第3次执行循环体
ROL AX,1
0101100111100001→1011001111000010,CF=0
RCL DX,1
0100100011010001→1001000110100010,第0位的0=CF
第4次执行循环体
ROL AX,1
1011001111000010→0110011110000101,CF=1,AX=6785H
RCL DX,1
1001000110100010→0010001101000101,第0位的1=CF,DX=2345H