x86汇编_循环左/右移_带进位的循环左/右移_笔记48
英文全称 | 汇编指令 | 中文翻译 | 说明 |
Rotate Left | ROL | 循环左移 | 目标操作数循环向左移,最后一个被移出来的数字放入CF标志位,同时循环回最右边(LSB)。 |
Rotate Right | ROR | 循环右移 | 目标操作数循环向右移,最后一个被移出来的数字放入CF标志位,同时循环回最左边(MSB)。 |
Rotate With Carry Left | RCL | 带进位的循环左移 | 将CF位放到目标操作数的最左边,一起参与循环,从CF位移出去的数字循环回LSB。 |
Rotate With Carry Right | RCR | 带进位的循环右移 | 将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
x86汇编_循环左/右移_带进位的循环左/右移_笔记48相关推荐
- x86汇编_移位和循环移位指令简介_笔记46
移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一.位移动 (bit shifting) 意味着在操作数内向左或向右移动.x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指 ...
- x86汇编_指令集大全_笔记_6
汇编指令集太多,如果不用就会忘记,所以将intel处理器官方的指令集整理一下. ------------------------------------------ 一.数据传输指令 -------- ...
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...
From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...
- 带进位循环右移c语言,带进位循环右移指令.PPT
带进位循环右移指令 电气与PLC控制技术 项目七: PLC功能指令应用 项目七: PLC功能指令应用 带进位循环右移指令 XXXXX XXXXX FX2系列可编程控制器移位控制指令有移位.循环移位.字 ...
- x86汇编指令集大全
一.数据传输指令 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX ...
- X86汇编---寄存器+指令
文章目录 X86汇编常见的寄存器 x86汇编指令集大全 X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP ...
- c语言带进位循环左移,带进位循环左移指令.ppt
带进位循环左移指令.ppt [例4]如图7.65所示,RCL指令应用举例 项目七: PLC功能指令应用 项目七: PLC功能指令应用 带进位循环左移指令 XXXXX XXXXX FX2系列可编程控制器 ...
- 【x86汇编】第三章:宏汇编语言的表达式
文章目录 表达式 常量 数值表达式 变量 标号 地址表达式 属性定义算符PTR 定义类型运算符THIS 跨段前缀算符 属性分离运算符 其它算符 常用运算符优先级 常用的机器指令语句 数据传送指令 一般 ...
最新文章
- 【Qt】通过QtCreator源码学习Qt(二):跨平台编程
- 星际2虫王iA加入商汤,担任AI研究员,网友:iA vs AI ,是自己训练跟自己打吗?...
- 【集合框架】JDK1.8源码分析之IdentityHashMap(四)
- 自己写一个最简单的bootloader_jz2440
- How To: Team Build 自定义版本号
- MySQL GROUP BY:分组查询
- VMWare虚拟机转换成KVM
- Android插u盘自动执行,android tv box ---- 插入u盘直接播放指定文件夹中的视频
- android开机自动开启zram,低内存配置 | Android 开源项目 | Android Open Source Project...
- MetaMask发布自定义网络API,允许开发人员为其用户提供多链服务
- 自动控制原理_电容补偿的作用与自动控制原理
- python 求点到线段距离
- python不用sort排序_Python排序方法sort、sorted的key参数的作用
- Android 如何优雅地实现@人功能?
- 2010年5月18日 小细节大隐患
- Microsoft Office 2016 简体中文 Vol 版镜像下载
- 路径规划-人工势场法(Artificial Potential Field)
- kaka-manager和kafka-offset-monitor的安装和使用
- 颜色空间:RGB,CMY,HSV,HSL,Lab详解
- 定制xdoclet 标签
热门文章
- java source 1.5_解决:Java source1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符...
- php用什么服务器系统时间格式,php中时间戳和日期格式的转换
- 基于Keras实现猫狗大战,25000张猫狗图像的精准分类
- Erasure Coding
- java 类型擦除_java中的类型擦除type erasure
- 【Spring Boot 25,自学Java视频百度云
- 使用halo和hexo+github两种方式免费搭建个人博客网站
- ECG分析:基于深度学习的ECG心律失常分类入门(1)
- ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析
- “穷X”事件程序员致歉:以后老实写代码