x86汇编

您所在的位置:网站首页 循环移位汇编 x86汇编

x86汇编

2024-07-17 17:22| 来源: 网络整理| 查看: 265

英文全称汇编指令中文翻译说明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



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3