学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验1实验八移位操作实验一、实验要求和目的1.了解汇编语言移位操作指令;2.熟悉汇编语言逻辑移位指令的使用方法;3.掌握利用汇编语言逻辑移位运算指令实现程序设计的方法。二、软硬件环境1.硬件环境:微机CPU486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM5.0、DEBUG、LINK和EDIT等应用程序。三、实验涉及的主要知识单元移位指令主要包括算术移位、逻辑移位、循环移位,以下分三类介绍。其中统一的语句格式为:操作符OPD,1操作符OPD,CL功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。1、算术移位(1)算术左移指令SAL格式:SALOPD1或CL描述:将(OPD)向左移动CL指定的次数,最低位补入相应的0,CF的内容为最后移入位的值。如图8-1所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。图8-1SAL(2)算术右移指令SAR格式:SAROPD1或CL描述:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。如图8-2所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。图8-2SAR2、逻辑移位学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验2(1)逻辑左移格式:SHLOPD1或CL描述:把目的操作数的低位向高位移CL规定的次数,空出的低位补0,CF的内容为最后移入位的值。与算术左移相同,如图8-1所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。(2)逻辑右移格式:SHROPD1或CL描述:把目的操作数的高位向低位移CL规定的次数,空出的高位补0,CF的内容为最后移入位的值。如图8-3所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。图8-3SHR3、循环移位循环移位包括不带进位的循环移位指令ROL、ROR和带进位的循环移位指令RCL、RCR。(1)不带进位循环左移指令ROL格式:ROLOPD1或CL描述:把目的操作数的低位向高位移CL规定的次数,移出的位不仅要进入CF,而且还要填补空出的位,CF的内容为最后移入位的值。如图8-4所示,受影响的标志位:CF、OF。图8-4ROL(2)不带进位循环右移指令ROR格式:ROROPD1或CL描述:把目的操作数的高位向低位移CL规定的次数,移出的位不仅要进入CF,而且还要填补空出的位,CF的内容为最后移入位的值。如图8-5所示,受影响的标志位:CF、OF。图8-5ROR(3)带进位循环左移指令RCL学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验3格式:RCLOPD1或CL描述:把目的操作数的低位向高位移CL规定的次数,用原CF的值填补空出的位,移出的位进入CF。如图8-6所示,受影响的标志位:CF、OF。图8-6RCL(4)带进位循环右移指令RCR格式:RCROPD1或CL描述:把目的操作数的高位向低位移CL规定的次数,,移出的位不仅要进入CF,而且还要填补空出的位,如图8-7所示,受影响的标志位:CF、OF。图8-7RCR四、实验内容与步骤1、实验内容(1)用A命令写程序片段,在寄存器AX中存入一个数,要求对其用移位命令进行乘8,除4的操作。(2)编写程序片段,实现如下的计算A=10*B,要求用到移位命令,不用乘法计算。(3)编写指令序列把由DX和AX组成的32位二进制数进行算术左移。2、实验步骤(1)预习移位命令的基本知识,熟悉这些命令的基本操作,根据实验内容,整理编程思路;(2)利用在DEBUG调试中的A命令输入对应程序片段;(3)对写好的程序片段,利用DEBUG的T、P命令或G命令查看数据区,核对实验结果。(1)学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验4(2)(3)学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验5学号:1467003175姓名:张志亭班级:软件技术3班汇编语言实验6五、思考与练习1.执行以下命令,观察AX是否有变化:(1)SALAX,1SARAX,1(2)SARAX,1SALAX,12.移位指令如何影响标志位CF、OF?1,2,目的操作数的内容左移1位或cl所制定的位,左边最高位移入标志位cf,在移动次数为一的情况下,若移位之后的操作数的最高位与cf状态不相同,则of=1,否则of=0;