不带进位循环(循环过程无CF参与 但CF接收移动位的副本)
rol 左移 mov ax,900A ;ax = 1001 0000 0000 1010 cf = 0 rol ax,1 ;ax = 0010 0000 0001 0101 cf = 1
0BA3:0100 mov ax,900A 0BA3:0103 rol ax,1 0BA3:0105
ror 右移 mov ax,900A ;ax = 1001 0000 0000 1010 cf = 0 ror ax,1 ;ax = 0100 1000 0000 0101 cf = 0
0BA3:0100 mov ax,900A 0BA3:0103 ror ax,1 0BA3:0105
|
rol/ror小结:
rol寄存器最高有效位之外的其它所有位 移到更高一位的有效位的位置,最高有效位则循环移到最低有效位的位置 ror寄存器最低有效位之外的其它所有位 移到更低一位的有效位的位置,最低有效位则循环移到最高有效位的位置 rol/ror对标志位的影响 在移位不过中CF不参与其中 但CF标志会接收从一端移动到另一端的位的副本。 |
带进位循环(循环过程有CF参与)
rcl 左移
mov ax,900a ;ax = 1001 0000 0000 1010 cf = 0 rcl ax,1 ;ax = 0010 0000 0001 0100 cf = 1
rcr 右移 mov ax,900a ;ax = 1001 0000 0000 1010 cf = 0 rcr ax,1 ;ax = 0100 1000 0000 0101 cf = 0
而如果是连续的代码 mov ax,900a ;ax = 1001 0000 0000 1010 cf = 0 rcl ax,1 ;ax = 0010 0000 0001 0100 cf = 1 mov ax,900a ;ax = 1001 0000 0000 1010 cf = 1 rcr ax,1 ;ax = 1100 1000 0000 0101 cf = 0
|
rcl/rcr小结: 将寄存器拓展一位并将其设置为最低位 cf作为这个拓展位 然后按照方向移动 左移就是寄存器最高有效位之外的其它所有位 移到更高一位的有效位的位置,最高有效位则循环移到最低有效位的位置 右移就是寄存器最低有效位之外的其它所有位 移到更低一位的有效位的位置,最低有效位则循环移到最高有效位的位置
|
移位操作对OF的影响
如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF = 1;否则OF = 0。当移位次数大于1时,OF不确定
循环移位对其他标志位无影响
|
MR.Dong
2010年7月16日22:47:19