汇编语言--微机CPU的指令系统(五)(移位操作指令)
(5) 移位操作指令
移位操作指令是一组经常使用的指令,它包括算术移位、逻辑移位、双精度移位、循环移位和带进位的循环移位等五大类。
移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的值。在8086中,该立即数只能为1,但在其后的CPU中,该立即数可以是1··31之内的数。
1、算术移位指令
算术移位指令有:算术左移SAL(Shift Algebraic Left)和算术右移SAR(Shift Algebraic Right)。它们的指令格式如下:
SAL/SAR Reg/Mem, CL/Imm
受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。
算术移位指令的功能描述如下,具体功能下图(a)、(b)所示。
算术左移SAL把目的操作数的低位向高位移,空出的低位补0,左移n位可以实现乘以2^n的功能;
算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补,右移n位可以实现乘以2^(-n)的功能。

例5.10 已知(AH)=12H,(BL)=0A9H,试给出分别用算术左移和右移指令移动1位后,寄存器AH和BL的内容。
解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如下表所示。

2、逻辑移位指令
此组指令有:逻辑左移SHL(Shift Logical Left)和逻辑右移SHR(Shift Logical Right)。它们的指令格式如下:
SHL/SHR Reg/Mem, CL/Imm
受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。
逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补0。它们的具体功能下图(a)、(b)所示。

例5.11 已知(AH)=12H,(BL)=0A9H,试给出分别用逻辑左移和右移指令移动1位后,寄存器AH和BL的内容。
解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如下表所示。

3、双精度移位指令
此组指令有:双精度左移SHLD(Shift Left Double)和双精度右移SHRD(Shift Right Double)。它们都是具有三个操作数的指令,其指令的格式如下:
SHLD/SHRD Reg/Mem, Reg, CL/Imm ;80386+
其中:第一操作数是一个16位/32位的寄存器或存储单元;第二操作数(与前者具有相同位数)一定是寄存器;第三操作数是移动的位数,它可由CL或一个立即数来确定。
在执行SHLD指令时,第一操作数向左移n位,其“空出”的低位由第二操作数的高n位来填补,但第二操作数自己不移动、不改变。
在执行SHRD指令时,第一操作数向右移n位,其“空出”的高位由第二操作数的低n位来填补,但第二操作数自己也不移动、不改变。
SHLD和SHRD指令的移位功能示意图如图5.8所示。
受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)

下面是几个双精度移位的例子及其执行结果。

4、循环移位指令
循环移位指令有:循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。
指令的格式:ROL/ROR Reg/Mem, CL/Imm
受影响的标志位:CF和OF
循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。具体功能如下图(a)、(b)所示。

下面是几个循环移位的例子及其执行结果。

5、带进位的循环移位指令
带进位的循环移位指令有:带进位的循环左移RCL(Rotate Left Through Carry)和带进位的循环右移RCR(Rotate Right)。
指令的格式:RCL/RCR Reg/Mem, CL/Imm
受影响的标志位:CF和OF
带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF的值填补空出的位,移出的位再进入CF。具体功能如下图(a)、(b)所示。

下面是几个带进位循环移位的例子及其执行结果。

例5.12 编写指令序列把由DX和AX组成的32位二进制算术左移、循环左移1位。
解:

总结:
逻辑左移时,最高位丢失,最低位补0;
逻辑右移时,最高位补0,最低位丢失;
算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。
算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;
循环左移时,将最高位重新放置最低位
循环右移时,将最低位重新放置最高位
使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。
例如:
1010100010101
逻辑左移一位结果为 0101000101010
逻辑右移一位结果为 0101010001010
算术左移一位结果为 1101000101010
算术右移一位结果为 1101010001010
循环左移一位结果为 0101000101011
循环右移一位结果为 1101010001010
循环左移ROL和带位循环左移RCL的区别:
假设当前,AL=01010011B,CF=1,则
执行指令 ROL AL,1
后,AL=10100110B,CF=0
执行指令 RCL AL,1
后,AL=10100111B,CF=0
最后一位的1,是先前CF的1
汇编语言--微机CPU的指令系统(五)(移位操作指令)的更多相关文章
- 汇编语言--微机CPU的指令系统(五)(数据传送指令)
五.微机CPU的指令系统 1.汇编语言指令格式 汇编语言的指令格式如下: 指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]] [;注释] 指令助忆符体现该指令的功能,它对应一条二进制编码的机 ...
- 汇编语言--微机CPU的指令系统(五)(条件设置字节指令)
(10)条件设置字节指令 条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有的一组指令.它们在测试条件方面与条件转移是一致的,但在功能方面,它们不是转移, ...
- 汇编语言--微机CPU的指令系统(五)(转移指令)
(9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...
- 汇编语言--微机CPU的指令系统(五)(比较运算指令)
(7)比较运算指令 在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能.为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令.通过这些比较指令的执行 ...
- 汇编语言--微机CPU的指令系统(五)(循环指令)
(8)循环指令 循环结构是程序的三大结构之一.为了方便构成循环结构,汇编语言提供了多种循环指令,这些循环指令的循环次数都是保存在计数器CX或ECX中.除了CX或ECX可以决定循环是否结束外,有的循环指 ...
- 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...
- 汇编语言--微机CPU的指令系统(五)(位操作指令)
(6) 位操作指令 1.位扫描指令(Bit Scan Instruction) 指令的格式:BSF/BSR Reg, Reg/Mem ;80386+ 受影响的标志位:ZF 位扫描指令是在第二个操作数中 ...
- 汇编语言--微机CPU的指令系统(五)(标志位操作指令)
(2)标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 Ø 清进位指令CLC(Clear Carry Flag):CF←0 Ø 置进位指令STC( ...
- 汇编语言--微机CPU的指令系统(五)(算术运算指令)
(3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...
随机推荐
- 背水一战 Windows 10 (93) - 选取器: FileOpenPicker, FolderPicker, FileSavePicker
[源码下载] 背水一战 Windows 10 (93) - 选取器: FileOpenPicker, FolderPicker, FileSavePicker 作者:webabcd 介绍背水一战 Wi ...
- git学习笔记 看廖大神视频小记
1.创建一个空目录 $ mkdir gittemp $cd gittemp $pwd //x显示当前目录 2.$ git init 把这个目录变成git可以管理的仓库 多的一个隐藏的.git 目录 可 ...
- 小白必读:闲话HTTP短连接中的Session和Token
本文引用了刘欣的文章,感谢原作者的分享. 1.引言 Http协议在现今主流的IM系统中拥有无可替代的重要性(在IM系统中用HTTP发起的连接被大家简称为http短连接),但Http作为传统互联网信息交 ...
- PopupWindow 以及拍照、裁剪
实现这样的效果 圆角图片的自定义控件直接拷进来,和com一个等级 想要弹出内容可以使用悬浮窗 layout_pupup <LinearLayout xmlns:android="htt ...
- FragmentTabHost用法
FragmentTabHost组成 Tabhost,TabWidget,切换的内容容器FrameLayout 层级关系 ----FragmentTabHost |-----TabWidget |--- ...
- 吴恩达机器学习笔记51-初始值重建的压缩表示与选择主成分的数量K(Reconstruction from Compressed Representation & Choosing The Number K Of Principal Components)
一.初始值重建的压缩表示 在PCA算法里我们可能需要把1000 维的数据压缩100 维特征,或具有三维数据压缩到一二维表示.所以,如果这是一个压缩算法,应该能回到这个压缩表示,回到原有的高维数据的一种 ...
- Handshake failed due to invalid Upgrade header: null 解决方案
Handshake failed due to invalid Upgrade header: null 解决方案 解决方案,在 Nginx ,location 中添加以下代码: proxy_set_ ...
- 第85节:Java中的JavaScript
第85节:Java中的JavaScript 复习一下css: 选择器的格式: 元素选择器:元素的名称{} 类选择器:. 开头 ID选择器:# ID选择器 后代选择器: 选择器1 选择器2 子元素选择器 ...
- while(true)应用之 实现自己的消息队列
早些时候,一直有个疑问,就是比如你从前端发一个操作之后,后台为什么能够及时处理你的东西呢?当然了,我说的不是,服务器为什么能够立即接收到你的请求之类高大上的东西.而是,假设你用异步去做一个事情,而后台 ...
- php内核之HashTable
Zend 把与 HashTable 有关的 API 分成了好几类以便于我们查找,这些 API 的返回值大多都是常量SUCCESS 或者 FAILURE. 初始化 HashTable 下面在介绍函数原型 ...