矩阵相乘汇编课设.docx

上传人:b****2 文档编号:2057329 上传时间:2023-05-02 格式:DOCX 页数:18 大小:85.73KB
下载 相关 举报
矩阵相乘汇编课设.docx_第1页
第1页 / 共18页
矩阵相乘汇编课设.docx_第2页
第2页 / 共18页
矩阵相乘汇编课设.docx_第3页
第3页 / 共18页
矩阵相乘汇编课设.docx_第4页
第4页 / 共18页
矩阵相乘汇编课设.docx_第5页
第5页 / 共18页
矩阵相乘汇编课设.docx_第6页
第6页 / 共18页
矩阵相乘汇编课设.docx_第7页
第7页 / 共18页
矩阵相乘汇编课设.docx_第8页
第8页 / 共18页
矩阵相乘汇编课设.docx_第9页
第9页 / 共18页
矩阵相乘汇编课设.docx_第10页
第10页 / 共18页
矩阵相乘汇编课设.docx_第11页
第11页 / 共18页
矩阵相乘汇编课设.docx_第12页
第12页 / 共18页
矩阵相乘汇编课设.docx_第13页
第13页 / 共18页
矩阵相乘汇编课设.docx_第14页
第14页 / 共18页
矩阵相乘汇编课设.docx_第15页
第15页 / 共18页
矩阵相乘汇编课设.docx_第16页
第16页 / 共18页
矩阵相乘汇编课设.docx_第17页
第17页 / 共18页
矩阵相乘汇编课设.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

矩阵相乘汇编课设.docx

《矩阵相乘汇编课设.docx》由会员分享,可在线阅读,更多相关《矩阵相乘汇编课设.docx(18页珍藏版)》请在冰点文库上搜索。

矩阵相乘汇编课设.docx

矩阵相乘汇编课设

矩阵相乘-汇编课设

附件1:

学号:

0120910340318

课程设计

 

题目

矩阵相乘运算

学院

计算机科学与技术

专业

计算机科学与技术

班级

计算机0903班

姓名

易驰杰

指导教师

张霞

 

2012

1

3

 

课程设计任务书

学生姓名:

易驰杰专业班级:

计算机0903班

指导教师:

张霞工作单位:

计算机科学与技术学院

题目:

矩阵相乘运算

初始条件:

理论:

完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:

完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。

具体的设计任务及要求:

1)模拟两个二维数组;

2)实现两个二维数组相乘,并将结果采用矩阵在屏幕上输出;

3)程序采用子程序结构,结构清晰;

4)友好清晰的用户界面,能识别输入错误并控制错误的修改。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:

1)《IBM—PC汇编语言程序设计实验教程》实验2.4

2)《IBM—PC汇编语言程序设计(第2版)》例6.11

时间安排:

设计安排一周:

周1、周2:

完成系统分析及设计。

周3、周4:

完成程序调试,和验收。

周5:

撰写课程设计报告。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

 

1.需求说明………………………………………………………………………………………………………………4

2.开发环境………………………………………………………………………………………………………………4

3.设计说明………………………………………………………………………………………………………………4

4.详细的算法描述……………………………………………………………………………………………….5

5.源程序与执行结果……………………………………………………………………………………………6

5.1源程序……………………………………………………………………………………………………………6

5.2执行结果…………………………………………………………………………………………………………12

5.2.1测试方法…………………………………………………………………………………………………12

5.2.2测试结果…………………………………………………………………………………………………12

5.2.3出错处理…………………………………………………………………………………………………12

6.使用说明………………………………………………………………………………………………………………13

7.总结………………………………………………………………………………………………………………………14

8.参考文献.................................................14

 

矩阵相乘运算的实现

1需求说明

1.1在这个演示的程序中,将对两个矩阵实现相乘的运算,并在计算机屏幕

终端显示运算的结果。

1.2数据由用户从键盘输入,其相关的数据定义为:

输入的数据的范围要在

00~99之间,如果输入的数据不满足条件的时候提示要求用户重新输入合法的数据。

1.3对两个矩阵相乘的数据结果以3行5列的格式显示出来,能给人一种视觉上的舒服感受。

1.4演示程序以用户和计算机对话的方式执行,即在计算机的终端上的“信息提示”下进行相关的数据的输入和操作。

2开发环境

Windowsxp

VisualASM汇编语言可视化继承开发工具

3设计说明

3.1对于这次设计的矩阵乘法,经过分析后可以发现虽然计算存在规律,但是输入数据没有规律。

所以我就将其设计为一个循环运算的程序,这样我就把没有规律的数据有规律的存放在连续的内存单元中,使数据在循环计算的过程中其地址(位移量)有规律的变化,利用变址寄存器或者基址寄存器来间接的访问它们,每循环一次修改一次寻址寄存器使之指向下一个数据元素。

3.2把输入的数据以矩阵的书写习惯显示出来,故程序在接收输入数据的时候要有一个控制,但是由于数据的输入本身就是一个循环,所以我设计为:

为数据输入添加一个循环,即用一个双存循环来控制矩阵的列数从而可以解决这个问题。

3.3此程序的功能可以分解为三个大的部分,第一部分就是实现数据的接收与保存;第二部分就是实现两个矩阵的乘法运算以及结果的保存;第三部分的功能就是实现对第二部分运算结果的输出显示。

所以在这个程序编写里面可以将对数据的输入和数据的输出分别写一个子功能程序,然后在主程序里面调用就可以使程序易读性和健壮性都得到增强。

4详细的算法描述

4.1对于两个矩阵其计算的实现如下:

所以得到:

c00=a00*b00+a01*b10+a02*b20+a03*b30

c01=a00*b01+a01*b11+a02*b21+a03*b31

…………………………

C24=a20*b04+a21*b14+a22*b24+a23*b34

4.2把a00,a01,a02……顺序放在Matrix1命名的字节变量中,而将b00,b01,b02,b03……存放在以Marix2命名的字节变量中,先假设每一个数据占一个字节,则在数据段里应如下分配内存(定义数据):

Matrix1db12dup(?

Matrix2db20dup(?

Resultdb15dup(?

这样数据的存放就有规律了,只要其中的一个数据的存放地址给定了,其余的各个数据的存放地址就可以随之确定,其间只是相差一个常数。

例如OFFSETMatrix1取的是a00的存放地址(位移量),而a01的存放地址与a00的存放地址的距离是1,a02和a01的存放地址的距离是1,……依次下去。

这样存放的数据就可以使用变址寄存器或者基址寄存器来间接的访问和使用它们。

4.3对于矩阵的相乘的实现,一共有三道循环,第一个最内部的循环就是在定行与定列的相乘时候四个数据的相乘后相加的循环;然后外部的一个循环就是关于定行选择不同列进行相乘的循环;最外面的一个循环就是关于选行的循环。

不过三个循环实现起来的深度有点大,可以把最外面的一道循环写成三次分别调用,这样可以使程序容易实现,看起来更清楚明白。

5源程序与执行结果

5.1源程序如下:

DATASEGMENT;数据段定义

INFORMATION1DB"Pleaseenterthematrix1!

Thearrayis3*4!

$";提示说明

INFORMATION2DB"Pleaseenterthematrix2!

Thearrayis4*5!

$";提示说明

tipsDB'inputanumber(00~99)$'

bufDB?

?

;输入缓冲

M1DB0DH,0AH,"Thearray1:

$";提示信息

M2DB0DH,0AH,"Thearray2:

$"

M3DB0DH,0AH,"Array1*Array2:

$"

matrix1DB12DUP(?

);矩阵1

matrix2DB20DUP(?

);矩阵2

resultDW15DUP(?

);矩阵相乘结果

DATAENDS

enterMACRO

MOVAH,02h

MOVDL,0ah

INT21h

MOVDL,0dh

INT21h

ENDM

CODESEGMENT;定义代码段

mainPROCFAR

ASSUMECS:

CODE,DS:

DATA

begin:

MOVAX,DATA;置DS段初值

MOVDS,AX

LEADX,INFORMATION1;取信息提示地址偏移量

MOVAH,09h;9号功能调用显示提示信息

INT21H

enter

LEADX,m1;提示输入矩阵1

MOVAH,9

INT21H

MOVCX,12

MOVBP,0

enter

k0:

CALLinput

MOVmatrix1[BP],DL

MOVAH,2

MOVDL,20h

INT21h

INCBP

LOOPk0

enter

LEADX,INFORMATION2;取信息提示地址偏移量

MOVAH,09h;9号功能调用显示提示信息

INT21H

enter

MOVBP,0

LEADX,m2;提示输入矩阵2

MOVAH,9

INT21H

enter

XORBP,BP

MOVCX,20

m0:

CALLinput

MOVmatrix2[BP],DL

MOVAH,2

MOVDL,20h

INT21h

INCBP

LOOPm0

XORAX,AX

MOVDI,0

MOVSI,0

MOVBP,0

MOVCX,0

q:

CALLgochengfa;CALLgochengfa

;调用矩阵1某行和矩阵2的列相乘子程序

MOVDI,0

INCCX

MOVSI,CX

CMPCX,5

JNZq

MOVDI,4;incdi

MOVSI,0

MOVCX,5

q1:

CALLgochengfa

MOVDI,4

INCCX

MOVSI,CX

CMPCX,5

JNZq1

MOVDI,8;incdi

MOVSI,0

MOVCX,5

q2:

CALLgochengfa

MOVDI,8

INCCX

MOVSI,CX

CMPCX,5

JNZq2

MOVAH,9

MOVDX,OFFSETM3

INT21H

enter

CALLoutput

MOVAH,01h

INT21h

MOVAH,4CH

INT21H

RET

mainENDP

gochengfaPROCNEAR;矩阵相乘子程序

PUSHCX

PUSHSI

MOVDX,0

MOVCX,4;设置循环次数

again:

MOVAL,matrix1[DI]

MOVAH,0;取矩阵1的偏移地址

MOVBL,matrix2[SI];取矩阵2的偏移地址

MOVBH,0

MULBL

ADDDX,AX

ADDDI,01H

ADDSI,5

LOOPagain

MOVresult[BP],DX

ADDBP,2

POPCX

POPSI

RET

gochengfaENDP

inputPROCNEAR

PUSHAX

PUSHBX

PUSHCX

;check

s:

MOVDI,2

s1:

DECDI

MOVAH,01h

INT21h

CMPAL,20h

JZent

CMPAL,30h

JBs

CMPAL,39h

JAs

MOVbuf[DI],AL

CMPDI,0

JNZs1

DECDI

ent:

CMPDI,1

JZs

INCDI

;count

MOVBL,10

MOVDL,buf[DI]

MOVDH,0

SUBDL,30h

CMPDI,1

JZsave

INCDI

l:

MOVAL,buf[DI]

SUBAL,30h

MULBL

ADDDX,AX

;save

save:

POPCX

POPBX

POPAX

RET

inputENDP

outputPROCNEAR

LEASI,result

MOVCX,3

m:

PUSHCX

MOVCX,5

K:

PUSHCX

MOVDX,0

MOVAX,[SI]

MOVCX,10000

DIVCX

MOVBX,DX

MOVDL,AL

CMPDL,0

JZa

ADDDL,30h

MOVAH,02h

INT21h

a:

MOVDX,0

MOVAX,BX

MOVCX,1000

DIVCX

MOVBX,DX

MOVDL,AL

ADDDL,30h

MOVAH,02h

INT21h

MOVAX,BX

MOVCL,100

DIVCL

MOVBL,AH

MOVDL,AL

CMPDL,0

JZb

ADDDL,30h

MOVAH,2h

INT21h

b:

MOVAL,BL

MOVAH,0

MOVCL,10

DIVCL

MOVBL,AH

MOVDL,AL

ADDDL,30h

MOVAH,02h

INT21h

MOVDL,BL

ADDDL,30h

MOVAH,02h

INT21h

MOVDL,20h

MOVAH,02h

INT21h

POPCX

ADDSI,2

LOOPk

enter

POPCX

LOOPm

RET

outputENDP

CODEENDS

ENDbegin

5.2执行结果

5.2.1测试方法

首先,我们按照要求输入第一个3*4型矩阵(也就是12个数据),假如为123456789101112。

再次按照提示输入第二个4*5型矩阵(也就是20个数据),假如为012340567809101112013141516。

5.2.2测试结果

在输入数据的时候第一次输入的为3*4矩阵,所以输入的数据为12个,当12个数据输入结束后程序自动转行并提示输入的二个矩阵即4*5的矩阵,所以第二次输入的数据是20个,输入数据结束后程序自行进行计算并显示出结果。

执行的结果如下:

 

5.2.3出错处理

在输入数据的时候,如果输入了不合法的字符,例如字母程序将显示信息提示用户重新输入新的合法数据。

输入的数据只能在0到99的范围内,所以最后的3*5型矩阵最多是4位数。

6使用说明

1.本次程序的使用说明,我们先把源程序拷贝到一个文本文件中,并把它命名为一个汇编程序的格式(*.asm),如yichijie.asm

2.我们在dos中找到masm.exe与link.exe文件所在的文件夹

Masm3>masmyichijie

………

Masm3>linkyichijie

………

Masm3>yichijie

3.进行链接和运行后,会生成相应的.obj和.exe文件,如下所示:

 

7总结

此次的汇编课程设计是在所有复习考试的时间中完成的,加上因为元旦回家参加姐姐婚礼,所以完成的很是匆忙,在课程设计的这个时间中,我的程序也是错误不断,但是经过反复地调试最终还是苦尽甘来,感觉付出了还是有回报的。

我的课程设计的题目是矩阵的相乘,我的脑海中开始浮现了用C++实现的算法,开始感觉应该是不难的。

可是无奈发现这是汇编的课设,我要想的是用汇编的语言来写程序,心中不免又开始焦急起来,发现我还有许许多多的问题有待解决。

比如:

汇编程序的格式只记得一般都有代码段和数据段,但具体怎么写?

菜单,我要怎么设置字符串变量?

输入、输出操作,用的是哪个寄存器?

比如这些问题,都把我给难住了。

但是程序始终要进行,我就开始静下心来认认真真地思考如何完成。

通过本次实验,我也学会了一种调试程序的方法,那就是“一个函数一个函数单独测试”的方法。

另外一般在编写程序时,我首先应该写出程序的主体框架,然后再进行修饰、完善。

在查错时,我们一定要一条语句一条语句的推敲,绝不能疏忽大意,因为错误的程序往往都是形似而神非,往往错误就在那一两条语句,所以必须仔细。

通过这次的矩阵的相乘的汇编语言设计,我也了解了汇编语言和其他高级语言之间的差别,还是可以对比起来学习的。

我觉得这次汇编语言课程设计让我受益菲浅,是一次重要的,有意思的实践。

让我在这次课程设计中学到了以前在课堂上没能学到的知识。

我相信,我会在以后的学习中更加注重这块的学习。

 

8参考文献:

IBM—(INTEL8088/80X86)宏汇编语言程序设计

《IBM—PC汇编语言程序设计实验教程》实验2.4

《IBM—PC汇编语言程序设计(第2版)》例6.11

本科生课程设计成绩评定表

班级:

计算机0903  姓名:

易驰杰  学号:

0120910340318

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

10

6

设计验收

10

总得分/等级

评语:

 

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

 

                      指导教师签名:

                  200年 月 日

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

当前位置:首页 > 外语学习 > 英语学习

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

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