首页 技术资料正文

汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令(拷贝构造函数)

piaodoo 技术资料 2022-08-27 06:26:37 1184 0

汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令(拷贝构造函数)

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

RCL(带进位循环左移)指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位:如果把进位标志位当作操作数最高位的附加位,那么 RCL 就成了循环左移操作。下面的例子中,CLC 指令清除进位标志位。第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位。第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位:strong的比较级和最高级

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

从进位标志位恢复位strong的比较级和最高级

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

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

RCR 指令

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

stc                            ; CF = 1mov ah, 10h             ; AH, CF = 00010000 1rcr ah, 1                    ; AH, CF = 10001000 0strong的比较级和最高级

有符号数溢出

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

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

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

mov al, -128           ; AL = 10000000bshr al, 1                  ; OF = 1, AL = 01000000bstrong的比较级和最高级

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

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/119654.html

搜索