二、循環(huán)移位指令
8086指令系統(tǒng)中有4條循環(huán)移位指令:
◆ 不帶進(jìn)位位的循環(huán)左移指令 ROL
◆ 不帶進(jìn)位位的循環(huán)右移指令 ROR
◆ 帶進(jìn)位位的循環(huán)左移指令 RCL
◆ 帶進(jìn)位位的循環(huán)右移指令 RCR
這4條指令的功能如圖3.5所示。

(a)不帶CF的循環(huán)左移指令ROL |

(b)不帶CF的循環(huán)右移指令ROR |

(c)帶CF的循環(huán)左移指RCL |

(d)帶CF的循環(huán)右移指令RCR |
圖3.5 移位指令的功能
【例】請用不帶CF的循環(huán)左移指令對操作數(shù)10110010進(jìn)行移位。參見動畫演示
【例】請用不帶CF的循環(huán)右移指令指令對操作數(shù)10110011進(jìn)行移位。參見動畫演示
【例】請用帶CF的循環(huán)左移指令對操作數(shù)10110010進(jìn)行移位。參見動畫演示
【例】請用帶CF的循環(huán)右移指令對操作數(shù)10110011進(jìn)行移位。參見動畫演示
從圖3.4上可以看到,ROL和ROR指令在執(zhí)行時(shí),沒有把CF包括循環(huán)中,而RCL和RCR指令在執(zhí)行時(shí),則連同CF一起循環(huán)移位。
這4條循環(huán)移位指令可以對字節(jié)進(jìn)行操作,也可以對字進(jìn)行操作,操作數(shù)可以是寄存器,也可以是存儲單元。如果循環(huán)移位指令只移動l位,則在指令中直接指出,如果要移動若干位,則必須在CL中指定移動位數(shù)。比如:
ROL BX,1 ;BX中的內(nèi)容不帶進(jìn)位位循環(huán)左移1位
ROL WORD PTR [DI],CL ;DI所指字單元中的數(shù)不帶進(jìn)位循環(huán)左移,CL中為移動次數(shù)
循環(huán)移位指令影響CF和OF標(biāo)志,對其它標(biāo)志不影響。ROL和RCL指令在執(zhí)行一次左移后,如果操作數(shù)的最高位和CF不等,則OF置1。同樣,ROR和RCR指令在執(zhí)行一位右移時(shí),如果使操作數(shù)的最高位和次高位不等,則表示移位后的數(shù)據(jù)符號和原來的符號不同了,此時(shí)也會使OF為1。
因此,循環(huán)移位指令在執(zhí)行后,標(biāo)志位OF為1表示數(shù)據(jù)的符號發(fā)生了改變。
|