北京理工大学汇编实验报告2

2018-11-01 16:45

本科实验报告

实验名称:实验二 算术运算实验

课程设计Ⅰ(CPU与汇编)课程名称: (实验) 任课教师: 聂青 实验教师: 苏京霞 学生姓名: 罗逸雨 学号/班级: 1120141208 05211401 学 院: 信息与电子学院 专 业: 通信工程 第5-10周周五下实验时间: 午 实验地点: 10-102 ? 原理验证 实验类型: □ 综合设计 □ 自主创新 组 号: 3 同组搭档: 成 绩:

一、实验目的

1) 掌握MASM for Windows 环境下的汇编语言编程环境使用;

2) 掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;

3) 掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;

4) 掌握无符号数和有符号数运算区别及编程方法;

二、实验环境与原理

1.实验软硬件环境

1) 硬件环境:惠普 64 位一体化计算机及局域网;

2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。

2.实验原理

算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。 1) 标志位

在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。

2) 加减法指令

ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。 3) 乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。 4) 符号位扩展指令

CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。

5) BCD码的调整指令

在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。

组合的BCD码加法调整指令DAA; 组合的BCD码减法调整指令DAS; 非组合的BCD码加法调整指令AAA; 非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AAD。

8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。

三、实验步骤

1)试编程以下各组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:

总结各运算对状态标志位的影响,及其意义。

2) 在数据段定义了两个多精度的有符号16进制数,BUF1和BUF2。求两数的和与差,并将计算值存放在BUF3为首地址的缓冲区中;同时将两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在BUF3为首地址的缓冲区中。试编程实现上述运算。

BUF1DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H

3) 编程计算280*584/ 190,运算结果用十六进制表示。要求上式计算结果的商存入AX,余数存入DX寄存器。

四、程序清单与框图

(1) 程序:

CODES SEGMENT

ASSUME CS:CODES START:

MOV AX,0ABH MOV BX,78H

ADD AX,BX ; 0ABH+078H MOV AX,0ABH MOV BX,78H

SUB AX,BX; 0ABH-078H MOV AX,64H

ADD AX,5AH; 64H+5AH MOV AX,64H

SUB AX,5AH; 64H-5AH MOV AL,0A2H MOV BL,3FH

MUL BL ; 0A2H*3FH MOV AX,0A2H MOV BL,3FH

DIV BL ; 0A2H/3FH MOV AH,4CH INT 21H CODES ENDS END START

(2) 程序:

1. 十六进制求和 DATAS SEGMENT

BUF1 DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H

BUF3 DB 6 DUP(?) ;最高位符号位扩展后占一个字,共6个字节 A DW 0H DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX LEA SI,BUF1 LEA DI,BUF2 LEA BX,BUF3

CLC ;进位清空 MOV CX,4 L:

MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI

INC BX ;BX自增,指向下一个字节单元 DEC CX JNZ L

MOV AL,byte ptr[SI] CBW ;符号扩展 MOV DX,AX

MOV AL,byte ptr[DI] CBW ;符号扩展 ADC AX,DX

MOV word ptr[BX],AX MOV AH,4CH INT 21H CODES ENDS

END START

框图:

开始

初始化

BUF1,BUF2,BUF3单元

将BUF1,BUF2,BUF3

偏移地址放入SI、DI、

BX中 设为4 循环次数CX

将[SI]和[DI]低位字节

单元中的内容求和并保

存到[BX]对应字节单元

SI加一 DI加一 BX加一 CX减一

N CX=0?

Y

[SI]和[DI]中最高位字节扩展后求和并保存到[BX]字单元中 结束 程序功能:通过循环分别求得BUF1、BUF2中低四位字节的和,并存在BUF3对应字节单元中。值得注意的是有符号数相加时需要对最高位字节先进行符号扩展,所以BUF1、BUF2的高位字节的和需要放在循环外单独计算,最后将高位单元的字型的和存储在BUF3中。十六进制减法程序同理。组合BCD码加减法在最后需要进行DAA/DAS调整。

2. 十六进制作差 DATAS SEGMENT

BUF1 DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H BUF3 DB 6 DUP(?) DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX LEA SI,BUF1 LEA DI,BUF2 LEA BX,BUF3 CLC

MOV CX,4 L:

MOV AL,[SI] SBB AL,[DI] MOV [BX],AL INC SI INC DI INC BX DEC CX JNZ L

MOV AL,byte ptr[SI] CBW ;符号扩展 MOV DX,AX

MOV AL,byte ptr[DI] CBW ;符号扩展 SBB DX,AX

MOV word ptr[BX],DX MOV AH,4CH INT 21H CODES ENDS END START

3. 十进制求和 DATAS SEGMENT

BUF1 DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H BUF3 DB 6 DUP(?) DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX LEA SI,BUF1 LEA DI,BUF2 LEA BX,BUF3 CLC

MOV CX,5 L:

MOV AL,[SI] ADC AL,[DI] DAA

MOV [BX],AL INC DI INC SI INC BX DEC CX JNZ L MOV AL,0

ADC AL,0 ;存最高位进位 DAA

MOV byte ptr[BX],AL MOV AH,4CH INT 21H CODES ENDS END START

4.十进制作差 DATAS SEGMENT

BUF1 DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H BUF3 DB 6 DUP(?) DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX LEA SI,BUF1 LEA DI,BUF2 LEA BX,BUF3 CLC

MOV CX,5

L:

MOV AL,[SI] SBB AL,[DI] DAS

MOV [BX],AL INC DI INC SI INC BX DEC CX JNZ L MOV AL,0 SBB AL,0 DAS

MOV byte ptr[BX],AL MOV AH,4CH INT 21H CODES ENDS END START (3) 程序:

CODES SEGMENT

ASSUME CS:CODES MOV AX,280 MOV BX,584 MUL BX MOV BX,190 DIV BX MOV AH,4CH INT 21H CODES ENDS

END

五、实验结果与分析

(1) 计算 算式 结果 0ABH+78H 123H 0ABH-78H 33H 64H+5AH BEH 64H-5AH 0AH 0A2H*3FH 27DE 0A2H/3FH 商02 余数42 AF AC NA NA AC AC AC CF NC NC NC NC CY CY 状态标志 ZF OF NZ NV NZ NV NZ NV NZ NV NZ OV NZ OV SF PL PL PL PL PL PL PF PO PE PE PE PE PE 无符号数运算标志位意义总结: 状态标志位 CF 加法 减法 乘法 除法 0 最高位无进位 1 最高位有进位 0 最高位无借位 1 最高位有借位 0 CF=OF=0 乘积的高一半为0(字节操作的(AH)或字操作的(DX)) 无影响 1 CF=OF=1 乘积的高一半不为0 0 1 无 定 义 AF 低四位向高四位无进位 结果不为0 无溢出 低四位向高四位进位 低四位向高四位无进位 低四位向高四位进位 无影响 ZF OF 结果为0 结果不为0 两个同符号数相加,结果符号与其相反,发生溢出。 无溢出 结果为0 无影响 两数符号相反,而结果符号与减数相同,发生溢出。 CF=OF=0 乘积的高一半为0(字节操作的(AH)或字操作的(DX)) 无影响 无影响 无影响 CF=OF=1 乘积的高一半不为0 SF PF 最高位为0 1的个数为奇数个 最高位为1 1的个数为偶数个 最高位为0 1的个数为奇数个 最高位为1 1的个数为偶数个 无影响 无影响

DEBUG运行结果截图: 0ABH+078H=0123H

0ABH-78H=0033H

64H+5AH=BEH

64H-5AH=0AH

02AH*3FH=27DE

0A2H/3FH= 商02 余数 42

(2)

BUF1、BUF2均为有符号数

BUF1 DB 92H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H 16进制结果 BUF1+BUF2 C5 DE 5C A9 CA 00 BUF1-BUF2 5F 52 2E 1F 26 00 经过计算验证,运行结果均正确。

DEBUG运行结果截图: 1.十六进制数求和

10进制结果 25 45 63 09 31 01 59 52 28 19 26 00

2.十六进制数作差

3.十进制求和

4.十进制作差

(3)280*584/190 商:035CH 余数:0078H DEBUG运行结果截图:

AX=035C,DX=0078

经验算后证明结果正确。

六、实验感想

经过本次实验,我对汇编语言中的二进制、十六进制、十进制、BCD码的表示形式有了一定了解,对有关BCD码调整指令方面的知识有了更深刻的认识,熟悉了二进制多字节加减法基本指令的使用方法以及无符号数和有符号数乘法和除法指令的使用,通过分析和思考,掌握了各类运算类指令对各状态标志位的影响和测试方法,以及无符号数和有符号数运算区别及编程方法。

在编第二小题的程序时,开始时我忽略了给出的有符号数这个条件,使用了无符号数的方法进行编程,后来老师指出了这个问题。经过更正这个错误,尝试了无符号数和有符号数的不同的编程方式,我对无符号数和有符号数运算的区别及编程方法有了更加深刻的认识。在课堂上学的知识只给我留下了较浅的印象,只有通过自己动手编程才能有效巩固所学的知识。


北京理工大学汇编实验报告2.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:LED可见光通信发射与接收系统设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: