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

上传人:b****8 文档编号:10957990 上传时间:2023-02-24 格式:DOCX 页数:16 大小:121.95KB
下载 相关 举报
北京理工大学汇编实验报告2.docx_第1页
第1页 / 共16页
北京理工大学汇编实验报告2.docx_第2页
第2页 / 共16页
北京理工大学汇编实验报告2.docx_第3页
第3页 / 共16页
北京理工大学汇编实验报告2.docx_第4页
第4页 / 共16页
北京理工大学汇编实验报告2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

《北京理工大学汇编实验报告2.docx》由会员分享,可在线阅读,更多相关《北京理工大学汇编实验报告2.docx(16页珍藏版)》请在冰豆网上搜索。

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

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

本科实验报告实验名称:

实验二算术运算实验

课程名称:

课程设计Ⅰ(CPU与汇编

(实验实验时间:

第5-10周周五下

任课教师:

聂青实验地点:

10-102

实验教师:

苏京霞

实验类型:

☑原理验证□综合设计□自主创新

学生姓名:

罗逸雨

学号/班级:

112014120805211401组号:

3学院:

信息与电子学院同组搭档:

专业:

通信工程成绩:

一、实验目的

1掌握MASMforWindows环境下的汇编语言编程环境使用;

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

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

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

二、实验环境与原理

1.实验软硬件环境

1硬件环境:

惠普64位一体化计算机及局域网;

2软件环境:

Windows8,红蜘蛛管理系统,MASMforWindows。

2.实验原理

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

1标志位

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

2加减法指令

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

3乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。

4符号位扩展指令

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

5BCD码的调整指令

在进行十进制加减运算时,需要将数据用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为首地址的缓冲区中。

试编程实现上述运算。

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

3编程计算280*584/190,运算结果用十六进制表示。

要求上式计算结果的商存入AX,余数存入DX寄存器。

四、程序清单与框图

(1

程序:

CODESSEGMENT

ASSUMECS:

CODES

START:

MOVAX,0ABH

MOVBX,78H

ADDAX,BX;0ABH+078H

MOVAX,0ABH

MOVBX,78H

SUBAX,BX;0ABH-078H

MOVAX,64H

ADDAX,5AH;64H+5AH

MOVAX,64H

SUBAX,5AH;64H-5AH

MOVAL,0A2H

MOVBL,3FH

MULBL;0A2H*3FH

MOVAX,0A2H

MOVBL,3FH

DIVBL;0A2H/3FH

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

(2

程序:

1.十六进制求和

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

BUF3DB6DUP(?

;最高位符号位扩展后占一个字,共6个字节ADW0H

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC;进位清空

MOVCX,4

L:

MOVAL,[SI]

ADCAL,[DI]

MOV[BX],AL

INCSI

INCDI

INCBX;BX自增,指向下一个字节单元

DECCX

JNZL

MOVAL,byteptr[SI]

CBW;符号扩展

MOVDX,AX

MOVAL,byteptr[DI]

CBW;符号扩展

ADCAX,DX

MOVwordptr[BX],AX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

框图:

Y

程序功能:

通过循环分别求得BUF1、BUF2中低四位字节的和,并存在BUF3对应字节单元中。

值得注意的是有符号数相加时需要对最高位字节先进行符号扩展,所以BUF1、BUF2的高位字节的和需要放在循环外单独计算,最后将高位单元的字型的和存储在BUF3中。

十六进制减法程序同理。

组合BCD码加减法在最后需要进行DAA/DAS调整。

开始CX=0?

结束

初始化

BUF1,BUF2,BUF3单元

循环次数CX设为4SI加一DI加一BX加一CX减一将BUF1,BUF2,BUF3

偏移地址放入SI、DI、

BX中

将[SI]和[DI]低位字节单元中的内容求和并保存到[BX]对应字节单元N

[SI]和[DI]中最高位字节扩展后求和并保存到[BX]字单元中

2.十六进制作差

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATASSTART:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,4

L:

MOVAL,[SI]

SBBAL,[DI]

MOV[BX],AL

INCSI

INCDI

INCBX

DECCX

JNZL

MOVAL,byteptr[SI]

CBW;符号扩展

MOVDX,AX

MOVAL,byteptr[DI]

CBW;符号扩展

SBBDX,AX

MOVwordptr[BX],DX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3.十进制求和

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATASSTART:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,5

L:

MOVAL,[SI]

ADCAL,[DI]

DAA

MOV[BX],AL

INCDI

INCSI

INCBX

DECCX

JNZL

MOVAL,0

ADCAL,0;存最高位进位

DAA

MOVbyteptr[BX],AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

4.十进制作差

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATASSTART:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,5

L:

MOVAL,[SI]

SBBAL,[DI]

DAS

MOV[BX],AL

INCDI

INCSI

INCBX

DECCX

JNZL

MOVAL,0

SBBAL,0

DAS

MOVbyteptr[BX],AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

(3

程序:

CODESSEGMENT

ASSUMECS:

CODES

MOVAX,280

MOVBX,584

MULBX

MOVBX,190

DIVBX

MOVAH,4CH

INT21H

CODESENDS

END

五、实验结果与分析

(1

计算状态标志

算式结果AFCFZFOFSFPF0ABH+78H123HACNCNZNVPLPO0ABH-78H33HNANCNZNVPLPE64H+5AHBEHNANCNZNVPLPE64H-5AH0AHACNCNZNVPLPE0A2H*3FH27DEACCYNZOVPLPE

ACCYNZOVPLPE0A2H/3FH商02

余数42

无符号数运算标志位意义总结:

状态

标志

加法

减法乘法除法

01010101

CF最高位

无进位最高位

有进位

最高位

无借位

最高位

有借位

CF=OF=0

乘积的

高一半

为0(字

节操作

的(AH

或字操

作的

(DX

CF=OF=1

乘积的

高一半

不为0

AF低四位

向高四

位无进

位低四位

向高四

位进位

低四位

向高四

位无进

低四位

向高四

位进位

无影响无影响

ZF结果不

为0结果为0结果不

为0

结果为0无影响无影响

OF无溢出两个同

符号数

相加,结

果符号

与其相

反,发生

溢出。

无溢出两数符

号相反,

而结果

符号与

减数相

同,发生

溢出。

CF=OF=0

乘积的

高一半

为0(字

节操作

的(AH

或字操

作的

(DX

CF=OF=1

乘积的

高一半

不为0

SF最高位

为0最高位

为1

最高位

为0

最高位

为1

无影响无影响

PF1的个数

为奇数

个1的个数

为偶数

1的个数

为奇数

1的个数

为偶数

无影响无影响

DEBUG运行结果截图:

0ABH+078H=0123H

0ABH-78H=0033H64H+5AH=BEH64H-5AH=0AH02AH*3FH=27DE0A2H/3FH=商02余数42(2BUF1、BUF2均为有符号数BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52H16进制结果BUF1+BUF2C5DE5CA9CA00BUF1-BUF25F522E1F2600经过计算验证,运行结果均正确。

10进制结果254563093101595228192600DEBUG运行结果截图:

1.十六进制数求和2.十六进制数作差

3.十进制求和4.十进制作差(3280*584/190商:

035CH余数:

0078HDEBUG运行结果截图:

AX=035C,DX=0078经验算后证明结果正确。

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

在编第二小题的程序时,开始时我忽略了给出的有符号数这个条件,使用了无符号数的方法进行编程,后来老师指出了这个问题。

经过更正这个错误,尝试了无符号数和有符号数的不同的编程方式,我对无符号数和有符号数运算的区别及编程方法有了更加深刻的认识。

在课堂上学的知识只给我留下了较浅的印象,只有通过自己动手编程才能有效巩固所学的知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1