ROL指令:循环左移指令。
把目的地址中的数据循环左移n次,每左移一次,把最高位同时移入CF和操作数最低位。
相当于两步,每个循环开始时把最高位放入CF和最低位,然后每个数向左移动一个位置,这是一个循环
一般格式:如果循环移动的次数大于1,就必须把这个数存到CL里
ROL 目标操作数,1 ; 循环向左移1位
ROL 目标操作数,CL ; 循环向左移动N位
ROL指令循环左移,如下面的表格所示(移动之前)
CF | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
移动之后:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 |
ROR指令:循环右移指令。
把目的地址中的数据循环右移n次,每右移一次,把最低位同时移入CF和操作数最高位。
一般格式:
ROR 目标操作数,1 ; 循环向右移1位
ROR 目标操作数,CL ; 循环向右移动N位
如果循环移动的次数大于1,就必须把这个数存到CL里
ROR指令循环右移,如下面的表格所示(移动之前)
CF | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
移动之后:
0 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
RCL指令:带进位的循环左移。
连同进位标志CF左循环移动,每左移一次,把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位。
一般格式:如果循环移动的次数大于1,就必须把这个数存到CL里
RCL 目标操作数,1 ; 循环向左移1位
RCL 目标操作数,CL ; 循环向左移动N位
RCL指令循环左移,如下面的表格所示(移动之前):
CF | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
移动之后:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | CF |
RCR指令:带进位的循环右移。
连同进位标志CF右循环移动,每右移一次,把操作数的最低位移入CF,而CF中原有内容移入操作数的最高位。
一般格式:如果循环移动的次数大于1,就必须把这个数存到CL里
RCR 目标操作数,1 ; 循环向右移1位
RCR 目标操作数,CL ; 循环向右移动N位
RCR指令循环右移,如下面的表格所示(移动之前):
CF | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
移动之后:
0 | CF | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
例:编写代码,该代码使用循环移动命令而不是XCHG命令交换AX和BX寄存器的内容。
MOV CX,16
RCR AX,1
@TOP: RCR BX,1
RCR AX,1
LOOP @TOP
1 条评论
[…] 汇编(24)循环左右移指令/ROL/ROR/RCL/RCR […]