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

上传人:wj 文档编号:14069806 上传时间:2023-06-20 格式:DOC 页数:20 大小:297.50KB
下载 相关 举报
北京理工大学汇编实验报告.doc_第1页
第1页 / 共20页
北京理工大学汇编实验报告.doc_第2页
第2页 / 共20页
北京理工大学汇编实验报告.doc_第3页
第3页 / 共20页
北京理工大学汇编实验报告.doc_第4页
第4页 / 共20页
北京理工大学汇编实验报告.doc_第5页
第5页 / 共20页
北京理工大学汇编实验报告.doc_第6页
第6页 / 共20页
北京理工大学汇编实验报告.doc_第7页
第7页 / 共20页
北京理工大学汇编实验报告.doc_第8页
第8页 / 共20页
北京理工大学汇编实验报告.doc_第9页
第9页 / 共20页
北京理工大学汇编实验报告.doc_第10页
第10页 / 共20页
北京理工大学汇编实验报告.doc_第11页
第11页 / 共20页
北京理工大学汇编实验报告.doc_第12页
第12页 / 共20页
北京理工大学汇编实验报告.doc_第13页
第13页 / 共20页
北京理工大学汇编实验报告.doc_第14页
第14页 / 共20页
北京理工大学汇编实验报告.doc_第15页
第15页 / 共20页
北京理工大学汇编实验报告.doc_第16页
第16页 / 共20页
北京理工大学汇编实验报告.doc_第17页
第17页 / 共20页
北京理工大学汇编实验报告.doc_第18页
第18页 / 共20页
北京理工大学汇编实验报告.doc_第19页
第19页 / 共20页
北京理工大学汇编实验报告.doc_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

.

本科实验报告

实验名称:

实验二算术运算实验

课程名称:

课程设计Ⅰ(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表示从字扩展到双字的指令。

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为首地址的缓冲区中。

试编程实现上述运算。

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

开始

框图:

初始化BUF1,BUF2,BUF3单元

将BUF1,BUF2,BUF3偏移地址放入SI、DI、BX中

循环次数CX设为4

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

SI加一

DI加一

BX加一CX减一

N

CX=0?

Y

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

结束

程序功能:

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

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

十六进制减法程序同理。

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

2.十六进制作差

DATASSEGMENT

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

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

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

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,78H

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

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

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,78H

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

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

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)

计算

状态标志

算式

结果

AF

CF

ZF

OF

SF

PF

0ABH+78H

123H

AC

NC

NZ

NV

PL

PO

0ABH-78H

33H

NA

NC

NZ

NV

PL

PE

64H+5AH

BEH

NA

NC

NZ

NV

PL

PE

64H-5AH

0AH

AC

NC

NZ

NV

PL

PE

0A2H*3FH

27DE

AC

CY

NZ

OV

PL

PE

0A2H/3FH

商02余数42

AC

CY

NZ

OV

PL

PE

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

状态标志位

加法

减法

乘法

除法

0

1

0

1

0

1

0

1

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

无影响

无影响

PF

1的个数为奇数个

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均为有符号数

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

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

16进制结果

10进制结果

BUF1+BUF2

C5DE5CA9CA00

254563093101

BUF1-BUF2

5F522E1F2600

595228192600

经过计算验证,运行结果均正确。

DEBUG运行结果截图:

1.十六进制数求和

2.十六进制数作差

3.十进制求和

4.十进制作差

(3)280*584/190商:

035CH余数:

0078H

DEBUG运行结果截图:

AX=035C,DX=0078

经验算后证明结果正确。

六、实验感想

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

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

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

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

Word资料

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2