详解汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令

 更新时间:2020年01月14日 11:44:56   作者:汇编语言  
这篇文章主要介绍了汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

汇编语言是依赖于计算机的低级的程序设计语言。

RCL(带进位循环左移)指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位:

如果把进位标志位当作操作数最高位的附加位,那么 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

从进位标志位恢复位

RCL 可以恢复之前移入进位标志位的位。下面的例子把 testval 的最低位移入进位标志位,并对其进行检查。如果 testval 的最低位为 1,则程序跳转;如果最低位为 0,则用 RCL 将该数恢复为初始值:

.data
testval BYTE 01101010b
.code
shr testval, 1          ; 将lsb移入进位标志位
jc exit                     ; 如果该标志位置 1,则退出
rcl testval, 1           ; 否则恢复该数原值

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

有符号数溢出

如果有符号数循环移动一位生成的结果超过了目的操作数的有符号数范围,则溢出标志位置 1。换句话说,即该数的符号位取反。下例中,8 位寄存器中的正数(+127)循环左移后变为负数(-2):

mov al, +127          ; AL = 01111111b
rol al, 1                   ; OF = 1, AL = 11111110b

同样,-128 向右移动一位,溢出标志位置 1。AL 中的结果(+64)符号位与原数相反:

mov al, -128           ; AL = 10000000b
shr al, 1                  ; OF = 1, AL = 01000000b

如果循环移动次数大于 1,则溢出标志位无定义。

总结

以上所述是小编给大家介绍的汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作

    汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作

    这篇文章主要介绍了汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言指令集学习CMPXCHG比较并交换操作指令详解

    汇编语言指令集学习CMPXCHG比较并交换操作指令详解

    这篇文章主要为大家介绍了汇编语言指令集学习CMPXCHG比较并交换操作的指令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 使用汇编语言实现if else 循环函数调用的具体方法

    使用汇编语言实现if else 循环函数调用的具体方法

    这篇文章主要介绍了使用汇编语言实现if else 循环函数调用的具体方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言MIPS指令分类及寻址模式原理概念

    汇编语言MIPS指令分类及寻址模式原理概念

    这篇文章主要为大家介绍了汇编语言MIPS指令分类及寻址模式的原理及概念,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 汇编语言存储及寄存器原理解析

    汇编语言存储及寄存器原理解析

    这篇文章主要介绍了汇编语言存储及寄存器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 详解汇编语言 dup伪指令

    详解汇编语言 dup伪指令

    dup它有多种意义,包括Linux c 函数、C语言函数DUP、汇编指令、化学物质DUP。这篇文章主要介绍了汇编语言 dup伪指令的相关知识,需要的朋友可以参考下
    2020-01-01
  • 8086汇编语言nasm版本

    8086汇编语言nasm版本

    这篇文章主要介绍了8086汇编语言nasm版本,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编实现直接插入排序的方法示例

    汇编实现直接插入排序的方法示例

    这篇文章主要介绍了汇编实现直接插入排序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 在vs2017中编写汇编的实现(图文)

    在vs2017中编写汇编的实现(图文)

    这篇文章主要介绍了在vs2017中编写汇编的实现(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • x86汇编DOS编程环境搭建过程

    x86汇编DOS编程环境搭建过程

    在学习x86汇编时,第一步是搭建一个可以编译、运行代码的环境,这个搭建方法也真的超简单,本文重点给大家介绍x86汇编DOS编程环境搭建过程,感兴趣的朋友一起看看吧
    2021-11-11

最新评论