收藏 分销(赏)

矩阵相乘汇编课设.pdf

上传人:a199****6536 文档编号:2018578 上传时间:2024-05-13 格式:PDF 页数:15 大小:316.02KB
下载 相关 举报
矩阵相乘汇编课设.pdf_第1页
第1页 / 共15页
矩阵相乘汇编课设.pdf_第2页
第2页 / 共15页
矩阵相乘汇编课设.pdf_第3页
第3页 / 共15页
矩阵相乘汇编课设.pdf_第4页
第4页 / 共15页
矩阵相乘汇编课设.pdf_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、武汉理工大学汇编语言程序设计课程设计说明书1附件 1:学学 号:号:0120910340318课课 程程 设设 计计题题 目目矩阵相乘运算矩阵相乘运算学学 院院计算机科学与技术计算机科学与技术专专 业业计算机科学与技术计算机科学与技术班班 级级计算机计算机 0903 班班姓姓 名名易驰杰易驰杰指导教师指导教师张霞张霞2012 年1月3日武汉理工大学汇编语言程序设计课程设计说明书2课程设计任务书课程设计任务书学生姓名:学生姓名:易驰杰易驰杰 专业班级:专业班级:计算机计算机 09030903 班班 指导教师:指导教师:张霞张霞 工作单位:工作单位:计算机科学与技术学院计算机科学与技术学院 题目题

2、目:矩阵相乘运算矩阵相乘运算初始条件:初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和 80 系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的 4 个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1)模拟两个二维数组;2)实现两个二维数组相乘,并将结果采

3、用矩阵在屏幕上输出;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC 汇编语言程序设计实验教程实验 2.42)IBMPC 汇编语言程序设计(第 2 版)例 6.11时间安排:时间安排:设计安排一周:周 1、周 2:完成系统分析及设计。周 3、周 4:完成程序调试,和验收。周 5:撰写课程设计报告。指导教师签名:指导教师签名:年年 月月 日日系主任(或责任教师)签名:系主任(或责任教师)签名:年年 月月 日日武汉理工大学汇编语言程序设计课程设

4、计说明书3目录目录1.1.需求说明需求说明4 42.2.开发环境开发环境4 43.3.设计说明设计说明4 44.4.详细的算法描述详细的算法描述.5.55.5.源程序与执行结果源程序与执行结果6 6 5.15.1 源程序源程序6 6 5.25.2 执行结果执行结果1212 5.2.15.2.1 测试方法测试方法1212 5.2.25.2.2 测试结果测试结果1212 5.2.35.2.3 出错处理出错处理12126.6.使用说明使用说明13137.7.总结总结14148.8.参考文献参考文献.14.14武汉理工大学汇编语言程序设计课程设计说明书4矩阵相乘运算的实现矩阵相乘运算的实现1 1 需求

5、说明需求说明1 11 1 在这个演示的程序中,将对两个矩阵实现相乘的运算,并在计算机屏幕 终端显示运算的结果。1 12 2 数据由用户从键盘输入,其相关的数据定义为:输入的数据的范围要在0099 之间,如果输入的数据不满足条件的时候提示要求用户重新输入合法的数据。1 13 3 对两个矩阵相乘的数据结果以 3 行 5 列的格式显示出来,能给人一种视觉上的舒服感受。1 14 4 演示程序以用户和计算机对话的方式执行,即在计算机的终端上的“信息提示”下进行相关的数据的输入和操作。2 2 开发环境开发环境 Windows xp VisualASM 汇编语言可视化继承开发工具3 3 设计说明设计说明3.

6、13.1对于这次设计的矩阵乘法,经过分析后可以发现虽然计算存在规律,但是输入数据没有规律。所以我就将其设计为一个循环运算的程序,这样我就把没有规律的数据有规律的存放在连续的内存单元中,使数据在循环计算的过程中其地址(位移量)有规律的变化,利用变址寄存器或者基址寄存器来间接的访问它们,每循环一次修改一次寻址寄存器使之指向下一个数据元素。3.23.2把输入的数据以矩阵的书写习惯显示出来,故程序在接收输入数据的时候要有一个控制,但是由于数据的输入本身就是一个循环,所以我设计为:为数据输入添加一个循环,即用一个双存循环来控制矩阵的列数从而可以解决这个问题。3.33.3此程序的功能可以分解为三个大的部分

7、,第一部分就是实现数据的接收与保存;武汉理工大学汇编语言程序设计课程设计说明书5第二部分就是实现两个矩阵的乘法运算以及结果的保存;第三部分的功能就是实现对第二部分运算结果的输出显示。所以在这个程序编写里面可以将对数据的输入和数据的输出分别写一个子功能程序,然后在主程序里面调用就可以使程序易读性和健壮性都得到增强。4 4 详细的算法描述详细的算法描述 4.14.1 对于两个矩阵其计算的实现如下:a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 b00 b01 b02 b03 b04 b10 b11 b12 b13 b14 b20 b21 b22 b2

8、3 b24 b30 b31 b32 b33 b34 c00 c01 c02 c03 c04 c10 c11 c12 c13 c14 c20 c21 c22 c23 c24*=*所以得到: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.24.2把 a00,a01,a02顺序放在 Matrix1 命名的字节变量中,而将b00,b01,b02,b03存放在以 Marix2 命名的字节变量中,先假设每一个数据占一个字节,则在数据段里

9、应如下分配内存(定义数据):Matrix1 db 12dup(?)Matrix2 db 20dup(?)Result db 15dup(?)这样数据的存放就有规律了,只要其中的一个数据的存放地址给定了,其余的各个数据的存放地址就可以随之确定,其间只是相差一个常数。例如OFFSET Matrix1 取的是 a00 的存放地址(位移量),而 a01 的存放地址与a00 的存放地址的距离是 1,a02 和 a01 的存放地址的距离是 1,依次下去。这样存放的数据就可以使用变址寄存器或者基址寄存器来间接的访问和使用它们。武汉理工大学汇编语言程序设计课程设计说明书64.34.3对于矩阵的相乘的实现,一共

10、有三道循环,第一个最内部的循环就是在定行与定列的相乘时候四个数据的相乘后相加的循环;然后外部的一个循环就是关于定行选择不同列进行相乘的循环;最外面的一个循环就是关于选行的循环。不过三个循环实现起来的深度有点大,可以把最外面的一道循环写成三次分别调用,这样可以使程序容易实现,看起来更清楚明白。5 5 源程序与执行结果源程序与执行结果 5 51 1 源程序如下:源程序如下:DATA SEGMENT ;数据段定义 INFORMATION1 DB Please enter the matrix1!The array is 3*4!$;提示说明 INFORMATION2 DB Please enter

11、the matrix2!The array is 4*5!$;提示说明 tips DB input a number(0099)$buf DB?,?;输入缓冲M1 DB 0DH,0AH,The array1:$;提示信息 M2 DB 0DH,0AH,The array2:$M3 DB 0DH,0AH,Array1*Array2:$matrix1 DB 12 DUP(?);矩阵 1 matrix2 DB 20 DUP(?);矩阵 2 result DW 15 DUP(?);矩阵相乘结果 DATA ENDS enter MACRO MOV AH,02h MOV DL,0ah INT 21h MOV

12、 DL,0dh INT 21h ENDM 武汉理工大学汇编语言程序设计课程设计说明书7 CODE SEGMENT ;定义代码段 main PROC FAR ASSUME CS:CODE,DS:DATA begin:MOV AX,DATA ;置 DS 段初值 MOV DS,AX LEA DX,INFORMATION1 ;取信息提示地址偏移量 MOV AH,09h ;9 号功能调用显示提示信息INT 21H enterLEA DX,m1 ;提示输入矩阵 1 MOV AH,9 INT 21H MOV CX,12 MOV BP,0 enter k0:CALL input MOV matrix1BP,D

13、L MOV AH,2 MOV DL,20h INT 21h INC BP LOOP k0 enter LEA DX,INFORMATION2 ;取信息提示地址偏移量 MOV AH,09h ;9 号功能调用显示提示信息 INT 21H enterMOV BP,0 LEA DX,m2 ;提示输入矩阵 2 MOV AH,9 INT 21H enter XOR BP,BP MOV CX,20 m0:CALL input MOV matrix2BP,DL MOV AH,2 MOV DL,20h INT 21h INC BP LOOP m0 XOR AX,AX 武汉理工大学汇编语言程序设计课程设计说明书8

14、 MOV DI,0 MOV SI,0 MOV BP,0 MOV CX,0 q:CALL gochengfa ;CALL gochengfa ;调用矩阵 1 某行和矩阵 2 的列相乘子程序 MOV DI,0 INC CX MOV SI,CX CMP CX,5 JNZ q MOV DI,4;inc di MOV SI,0 MOV CX,5q1:CALL gochengfa MOV DI,4 INC CX MOV SI,CX CMP CX,5 JNZ q1 MOV DI,8;inc di MOV SI,0 MOV CX,5 q2:CALL gochengfa MOV DI,8 INC CX MOV

15、SI,CX CMP CX,5 JNZ q2 MOV AH,9 MOV DX,OFFSET M3 INT 21H enter CALL output MOV AH,01h INT 21h MOV AH,4CH INT 21H RET main ENDPgochengfa PROC NEAR ;矩阵相乘子程序 PUSH CX PUSH SI武汉理工大学汇编语言程序设计课程设计说明书9 MOV DX,0 MOV CX,4 ;设置循环次数 again:MOV AL,matrix1DI MOV AH,0 ;取矩阵 1 的偏移地址 MOV BL,matrix2SI ;取矩阵 2 的偏移地址 MOV BH,

16、0 MUL BL ADD DX,AX ADD DI,01H ADD SI,5 LOOP again MOV resultBP,DX ADD BP,2 POP CX POP SI RETgochengfa ENDP input PROC NEAR PUSH AX PUSH BX PUSH CX ;check s:MOV DI,2 s1:DEC DI MOV AH,01h INT 21h CMP AL,20h JZ ent CMP AL,30h JB s CMP AL,39h JA s MOV bufDI,AL CMP DI,0 JNZ s1 DEC DI ent:CMP DI,1 JZ s IN

17、C DI ;count MOV BL,10 MOV DL,bufDI武汉理工大学汇编语言程序设计课程设计说明书10 MOV DH,0 SUB DL,30h CMP DI,1 JZ save INC DI l:MOV AL,bufDI SUB AL,30h MUL BL ADD DX,AX ;save save:POP CX POP BX POP AX RETinput ENDP output PROC NEAR LEA SI,result MOV CX,3 m:PUSH CX MOV CX,5 K:PUSH CX MOV DX,0 MOV AX,SI MOV CX,10000 DIV CX M

18、OV BX,DX MOV DL,AL CMP DL,0 JZ a ADD DL,30h MOV AH,02h INT 21h a:MOV DX,0 MOV AX,BX MOV CX,1000 DIV CX MOV BX,DX MOV DL,AL ADD DL,30h MOV AH,02h INT 21h 武汉理工大学汇编语言程序设计课程设计说明书11 MOV AX,BX MOV CL,100 DIV CL MOV BL,AH MOV DL,AL CMP DL,0 JZ b ADD DL,30h MOV AH,2h INT 21h b:MOV AL,BL MOV AH,0 MOV CL,10 D

19、IV CL MOV BL,AH MOV DL,AL ADD DL,30h MOV AH,02h INT 21h MOV DL,BL ADD DL,30h MOV AH,02h INT 21h MOV DL,20h MOV AH,02h INT 21h POP CX ADD SI,2 LOOP k enter POP CX LOOP m REToutput ENDP CODE ENDS END begin5.25.2 执行结果执行结果5.2.15.2.1 测试方法测试方法武汉理工大学汇编语言程序设计课程设计说明书12首先,我们按照要求输入第一个 3*4 型矩阵(也就是 12 个数据),假如为 1

20、 2 3 4 5 6 7 8 9 10 11 12。再次按照提示输入第二个 4*5 型矩阵(也就是 20 个数据),假如为 0 1 2 3 4 0 5 6 7 8 0 9 10 11 12 0 13 14 15 16。5.2.25.2.2 测试结果测试结果在输入数据的时候第一次输入的为 3*4 矩阵,所以输入的数据为 12 个,当 12 个数据输入结束后程序自动转行并提示输入的二个矩阵即 4*5 的矩阵,所以第二次输入的数据是 20 个,输入数据结束后程序自行进行计算并显示出结果。执行的结果如下:5.2.35.2.3 出错处理出错处理在输入数据的时候,如果输入了不合法的字符,例如字母程序将显示

21、信息提示用户重新输入新的合法数据。输入的数据只能在 0 到 99 的范围内,所以最后的 3*5型矩阵最多是 4 位数。6 6 使用说明使用说明1.1.本次程序的使用说明,我们先把源程序拷贝到一个文本文件中,并把它命名为一个汇编程序的格式(*.asm),如 yichijie.asm2.2.我们在 dos 中找到 masm.exe 与 link.exe 文件所在的文件夹Masm3masm yichijie 武汉理工大学汇编语言程序设计课程设计说明书13 Masm3link yichijie Masm3yichijie3.3.进行链接和运行后,会生成相应的.obj 和.exe 文件,如下所示:7 7

22、 总结总结此次的汇编课程设计是在所有复习考试的时间中完成的,加上因为元旦回家参加姐姐婚礼,所以完成的很是匆忙,在课程设计的这个时间中,我的程序也是错误不断,但是经过反复地调试最终还是苦尽甘来,感觉付出了还是有回报的。我的课程设计的题目是矩阵的相乘,我的脑海中开始浮现了用 C+实现的算法,开始感觉应该是不难的。可是无奈发现这是汇编的课设,我要想的是用汇编的语言武汉理工大学汇编语言程序设计课程设计说明书14来写程序,心中不免又开始焦急起来,发现我还有许许多多的问题有待解决。比如:汇编程序的格式只记得一般都有代码段和数据段,但具体怎么写?菜单,我要怎么设置字符串变量?输入、输出操作,用的是哪个寄存器

23、?比如这些问题,都把我给难住了。但是程序始终要进行,我就开始静下心来认认真真地思考如何完成。通过本次实验,我也学会了一种调试程序的方法,那就是“一个函数一个函数单独测试”的方法。另外一般在编写程序时,我首先应该写出程序的主体框架,然后再进行修饰、完善。在查错时,我们一定要一条语句一条语句的推敲,绝不能疏忽大意,因为错误的程序往往都是形似而神非,往往错误就在那一两条语句,所以必须仔细。通过这次的矩阵的相乘的汇编语言设计,我也了解了汇编语言和其他高级语言之间的差别,还是可以对比起来学习的。我觉得这次汇编语言课程设计让我受益菲浅,是一次重要的,有意思的实践。让我在这次课程设计中学到了以前在课堂上没能

24、学到的知识。我相信,我会在以后的学习中更加注重这块的学习。8 8参考文献参考文献:IBM(INTEL 8088/80X86)宏汇编语言程序设计 IBMPC 汇编语言程序设计实验教程实验 2.4IBMPC 汇编语言程序设计(第 2 版)例 6.11本科生课程设计成绩评定表本科生课程设计成绩评定表班级:计算机 0903姓名:易驰杰学号:0120910340318序号评分项目满分实得分1学习态度认真、遵守纪律10武汉理工大学汇编语言程序设计课程设计说明书152设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100 分)、良(80-89 分)、中(70-79 分)、及格(60-69 分)、60 分以下为不及格指导教师签名:200 年月日

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服