一劳永逸---循环移位操作

不带进位循环(循环过程无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

201071622:47:19

你可能感兴趣的:(一劳永逸---循环移位操作)