移位指令有什么作用_移位指令的用法,举例说明

移位指令有什么作用_移位指令的用法,举例说明汇编语言微机CPU的指令系统(五)(移位操作指令)(5) 移位操作指令移位操作指令是一组经常使用的指令,它包括算术移位、逻辑移位、双精度移位、循环移位和带进位的循环移位等五大类。移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的值。在8086中,该立即数只能为1,但

汇编语言–微机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)的功能。   
clip_image002   例5.10 已知(AH)=12H,(BL)=0A9H,试给出分别用算术左移和右移指令移动1位后,寄存器AH和BL的内容。   解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如下表所示。   
clip_image004   2、逻辑移位指令   此组指令有:逻辑左移SHL(Shift Logical Left)和逻辑右移SHR(Shift Logical Right)。它们的指令格式如下:   SHL/SHR Reg/Mem, CL/Imm   受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。   逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补0。它们的具体功能下图(a)、(b)所示。   
clip_image006   例5.11 已知(AH)=12H,(BL)=0A9H,试给出分别用逻辑左移和右移指令移动1位后,寄存器AH和BL的内容。   解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如下表所示。   
clip_image008   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无定义)   
clip_image010   下面是几个双精度移位的例子及其执行结果。   
clip_image012   4、循环移位指令   循环移位指令有:循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。   指令的格式:ROL/ROR Reg/Mem, CL/Imm   受影响的标志位:CF和OF   循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。具体功能如下图(a)、(b)所示。   
clip_image014   下面是几个循环移位的例子及其执行结果。   
clip_image016   5、带进位的循环移位指令   带进位的循环移位指令有:带进位的循环左移RCL(Rotate Left Through Carry)和带进位的循环右移RCR(Rotate Right)。   指令的格式:RCL/RCR Reg/Mem, CL/Imm   受影响的标志位:CF和OF   带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF的值填补空出的位,移出的位再进入CF。具体功能如下图(a)、(b)所示。   
clip_image018   下面是几个带进位循环移位的例子及其执行结果。   
clip_image020   例5.12 编写指令序列把由DX和AX组成的32位二进制算术左移、循环左移1位。   解:   
clip_image022   总结:   逻辑左移时,最高位丢失,最低位补0;   逻辑右移时,最高位补0,最低位丢失;   算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。   算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;   循环左移时,将最高位重新放置最低位   循环右移时,将最低位重新放置最高位   使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。   例如:   01     逻辑左移一位结果为 00   逻辑右移一位结果为 00   算术左移一位结果为 10   算术右移一位结果为 10   循环左移一位结果为 01   循环右移一位结果为 10   循环左移ROL和带位循环左移RCL的区别:   假设当前,AL=0B,CF=1,则   执行指令 ROL AL,1   后,AL=B,CF=0   执行指令 RCL AL,1   后,AL=B,CF=0   最后一位的1,是先前CF的1

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/33847.html

(0)
上一篇 2024年 9月 10日 下午4:12
下一篇 2024年 9月 10日 下午4:16

相关推荐

关注微信