移位操作编程实验

上机实验05    移位操作编程实验

 

一、实验要求和目的

       1.了解汇编语言移位操作指令;

2.熟悉汇编语言逻辑移位指令的使用方法;

3.掌握利用汇编语言逻辑移位运算指令实现程序设计的方法。

二、软硬件环境

 

       1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;

       2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。

 

三、实验涉及的主要知识单元

移位指令主要包括算术移位、逻辑移位、循环移位,以下分三类介绍。其中统一的语句格式为:

    操作符 OPD,1

    操作符 OPD,CL

功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。

1、算术移位

       (1)算术左移指令SAL

        格式:SAL  OPD  1或CL

     描述:

     将(OPD)向左移动CL指定的次数,最低位补入相应的0,CF的内容为最后移入位的值。如图3-3所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

图3-3  SAL

  1. 算术右移指令SAR

     格式:SAR  OPD  1或CL

     描述:

     将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。如图3-4所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

图3-4  SAR

2、逻辑移位

(1)逻辑左移

格式:SHL  OPD  1或CL

描述:

把目的操作数的低位向高位移CL规定的次数,空出的低位补0,CF的内容为最后移入位的值。与算术左移相同,如图3-3所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

(2)逻辑右移

     格式:SHR  OPD  1或CL

描述:

把目的操作数的高位向低位移CL规定的次数,空出的高位补0,CF的内容为最后移入位的值。 如图3-5所示,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

 

 
   

 

 

 

图3-5  SHR

3、循环移位

       循环移位包括不带进位的循环移位指令ROL、ROR和带进位的循环移位指令RCL、RCR。

(1)不带进位循环左移指令ROL

 格式:ROL  OPD  1或CL

描述:

把目的操作数的低位向高位移CL规定的次数,移出的位不仅要进入CF,而且还要填补空出的位,CF的内容为最后移入位的值。如图3-6所示,受影响的标志位:CF、OF。

图3-6  ROL

(2)不带进位循环右移指令ROR

 格式:ROR  OPD  1或CL

描述:

把目的操作数的高位向低位移CL规定的次数,移出的位不仅要进入CF,而且还要填补空出的位,CF的内容为最后移入位的值。如图3-7所示,受影响的标志位:CF、OF。

图3-7  ROR

(3)带进位循环左移指令RCL

格式:RCL  OPD  1或CL

描述:

把目的操作数的低位向高位移CL规定的次数,用原CF的值填补空出的位,移出的位进入CF。如图3-8所示,受影响的标志位:CF、OF。

图3-8  RCL

(3)带进位循环右移指令RCR

格式:RCR  OPD  1或CL

描述:

       把目的操作数的高位向低位移CL规定的次数,,移出的位不仅要进入CF,而且还要填补空出的位,如图3-9所示,受影响的标志位:CF、OF。

  图3-9  RCR

    

四、实验内容与步骤

       1、实验内容

(1)用A命令写程序片段,在寄存器AX中存入一个数,要求对其用移位命令进行乘8,除4的操作。

 

  1. 编写程序片段,实现如下的计算A=10*B,要求用到移位命令,不用乘法计算。
  1. 编写指令序列把由DX和AX组成的32位二进制数进行算术左移。

    2、实验步骤

(1)预习移位命令的基本知识,熟悉这些命令的基本操作,根据实验内容,整理编程思路;

(2)利用在DEBUG调试中的A命令输入对应程序片段;

(3)对写好的程序片段,利用DEBUG的T、P命令或G命令查看数据区,核对实验结果。

五、实验要求与提示

1、实验要求

    (1)根据实验内容,写出分析思路;

    (2)对写出的程序片段,加上适量注释;

    (3)回答思考问题;

(4)记录实验结果。

 

2、实验提示

(1)移位运算中,左移一位相当于乘2操作,右移一位相当于除2操作;

    对寄存器AX赋值为4,然后先执行左移1位操作,再执行右移1位操作,用P命令观察寄存器AX的变化,如图3-10所示。

图3-10

(2)算术移位适合于有符号数的运算,逻辑移位适用于无符号数的运算。

 

(3)32位的移位注意CF的变化。

(4)运算下面程序,并观察各寄存器和标志位的值变化情况。

;****************************************************************

STACK SEGMENT PARA STACK

     DB 20 DUP(?)

STACK ENDS

 

 

CODE SEGMENT

     ASSUME CS:CODE,SS:STACK

START:

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP1:

     SAL AX,1  ;算术左移

     LOOP LOOP1

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP2:

     SAR AX,1  ;算术右移

     LOOP LOOP2

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP3:

     SHL AX,1  ;逻辑左移

     LOOP LOOP3

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP4:

     SHR AX,1  ;逻辑右移

     LOOP LOOP4

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP5:

     ROL AX,1  ;不带进位的循环左移

     LOOP LOOP5

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP6:

     ROR AX,1  ;不带进位的循环右移

     LOOP LOOP6

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP7:

     RCL AX,1  ;带进位的循环左移

     LOOP LOOP7

 

     MOV AX,0CBA5H

     MOV CX,0CH

LOOP8:

     RCR AX,1  ;带进位的循环右移

     LOOP LOOP8

 

     MOV AH,4CH ;返回DOS

     INT 21H

CODE ENDS

     END START

;************************************************************************

3、编程:设在数据段中定义有三个变量X,Y,Z,请利用算术移位指令编写程序“sy05_1.asm”,计算出下式的值(假设乘积的结果只有低16位有效):

        Z=10*(X+Y)

掌握和熟悉以上的各移位操作指令,并把调试好的程序sy05_1.asm 提交。

代码:

DATA SEGMENT

X     DW       0520H 

Y     DW 0521H 

Z     DW    2 DUP(?)   

DATA ENDS

 

CODE SEGMENT

  ASSUME CS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    MOV AX,X

    MOV BX,Y

    ADD AX,BX

    MOV CX,AX 

    MOV CL,3

    SHL AX,CL

    SHL CX,1

    ADD AX,CX

    MOV Z,AX

    MOV DX,Z

CODE ENDS

  END START

六、思考与练习以及测评标准

1.执行以下命令,观察AX是否有变化:

(1)SAL AX, 1
            SAR AX, 1 

(2)SAR AX, 1
            SAL AX, 1

2.移位指令如何影响标志位CF、OF?

 

全部评论

相关推荐

10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务