x86汇编_循环左/右移_带进位的循环左/右移_笔记48

英文全称汇编指令中文翻译说明
Rotate LeftROL循环左移目标操作数循环向左移,最后一个被移出来的数字放入CF标志位,同时循环回最右边(LSB)。
Rotate RightROR循环右移目标操作数循环向右移,最后一个被移出来的数字放入CF标志位,同时循环回最左边(MSB)。
Rotate With Carry LeftRCL带进位的循环左移将CF位放到目标操作数的最左边,一起参与循环,从CF位移出去的数字循环回LSB。
Rotate With Carry RightRCR 带进位的循环右移将CF位放到目标操作数的最右边,一起参与循环,从CF位移出去的数字循环回MSB。

ROL指令

在下例中,请注意最高位是如何复制到进位标志位和位 0 的:

mov al,40h        ; AL = 01000000b
rol al,1          ; AL = 10000000b, CF = 0
rol al,1          ; AL = 00000001b, CF = 1
rol alz1          ; AL = 00000010b, CF = 0

利用 ROL 可以交换一个字节的高四位(位 4〜7)和低四位(位 0〜3)。例如,26h 向任何方向循环移动 4 位就变为 62h:

mov al, 26h
rol al, 4          ; AL = 62h

使用rol指令每转动4个位,则十六进制数刚好转动1个数字。例如,将 6A4Bh 反复循环左移四位,最后就会回到初始值:

mov ax, 6A4Bh
rol ax, 4              ; AX = A4B6h
rol ax, 4              ; AX = 4B6Ah
rol ax, 4              ; AX = B6A4h
rol ax, 4              ; AX = 6A4Bh

ROR指令

 在下例中,请注意最低位是如何复制到进位标志位和结果的最高位的:

mov al, 0lh          ; AL = 00000001b
ror al, 1            ; AL = 10000000b, CF = 1
ror al, 1            ; AL = 01000000b, CF = 0

当循环计数值大于 1 时,进位标志位保存的是最后循环移出 LSB 的位:

mov al, 00000100b
ror al, 3              ; AL = 10000000b, CF = 1

RCL指令

 如果把进位标志位当作操作数最高位的附加位,那么 RCL 就成了循环左移操作。下面的例子中,CLC 指令清除进位标志位。第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位。第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位:

clc                      ; CF = 0
mov bl, 88h              ; CF,BL = 0 1000100Ob
rcl bl, 1                ; CF,BL = 1 00010000b
rcl b1, 1                ; CF,BL = 0 00100001b

RCR指令

RCR(带进位循环右移)指令把每一位都向右移,进位标志位复制到 MSB,而 LSB 复制到进位标志位。从上图来看,RCL 指令将该整数转化成了一个 9 位值,进位标志位位于 LSB 的右边。下面的示例代码用 STC 将进位标志位置 1,然后,对 AH 寄存器执行一次带进位循环右移操作:

stc                     ; CF = 1
mov ah, 10h             ; AH, CF = 00010000 1
rcr ah, 1               ; AH, CF = 10001000 0

  • 12
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值