汇编语言矩阵相乘课程设计(附源代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院
课程设计说明书
班级: 姓名:
学号:
课程名称: 汇编语言课程设计
课设时间: 2006-12-05 至2006-12-16
成绩评定:
1、工作量: A(),B(),C(),D(),F( )
2、难易度:A(),B(),C(),D(),F( )
3、答辩情况:
基本操作:A(),B(),C(),D(),F( )代码理解:A(),B(),C(),D(),F( )
4、报告规范度:A(),B(),C(),D(),F( )
5、学习态度:A(),B(),C(),D(),F( )总评成绩:
指导教师:
一.课程设计的目的、任务
1.课程设计的目的:
使学生综合使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。
课程设计的目的和要求:
(1)使学生巩固和加强《汇编语言》课程的理论知识。
(2)使学生掌握汇编语言的基本概念、语法、语义和数据类型的使用特点。
(3)使学生掌握汇编语言程序设计的方法及编程技巧,能正确使用汇编语言编写程序。
(3)进一步理解与运用结构化程序设计的思想和方法;学会利用流程图或N-S图表示算法。
(4)使学生掌握调试程序的基本方法及上机操作方法。
(5)掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。
(6)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。
(7)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极
性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,
并养成良好的编程习惯。
(8)培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。
(9)培养学生良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。学生在课程设计书写代码时,应该严格按要求处理,以便建立良
好的程序设计风格。
2.课程设计的题目——矩阵相乘
(1)要求:掌握多重循环程序的设计方法,并熟悉有关矩阵的编程原理。
(2)内容:将一个4 X 4 的矩阵与一个4 X 1 的矩阵相乘,将结果存入相应的单元,分别用十进制数、二进制、十六进制形式显示结果。
3.课程设计环境
(1)硬件:PC机。
(2)软件:操作系统为64位Windows7,设计语言为MASM FOR WINDOWS 汇编语言集成实验环境。
4.课程设计要求
(1)课程设计可采取每人一题,可任选一题进行设计,至少包含五个功能模块。或者每组完成一个课题,每组成员分工合作完成一个课程设计,每个人的任务不同;
(2)可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用;
(3)要求利用结构化程序设计方法以及汇编语言的编程思想来完成系统的设计;
(4)要求有欢迎界面、菜单、文件操作,数据使用数组、结构体等均可,键盘操作或鼠标操作均可;
(5)模块化程序设计:要求在设计的过程中,按功能定义过程或宏,多个模块化设计可以用文件的形式来实现;
(6)学生所选课题必须上机通过,并获得满意的结果;
(7)程序书写风格:锯齿型书写格式。
二.软件需求分析和设计
(1)需求分析本程序主要实现的功能是一个4*4矩阵与4*1矩阵相乘最后得到一个4*1矩阵,并且要求用三种方式输出这个矩阵,分别是二进制和十六进制和十进制。并且这个程序要求菜单的选择。
(2)下面就是这个程序的流程图
、
三. 程序实现说明(介绍程序实现过程,包括关键代码分析(注意:
应该限制代码的数量))
Y
Y
1.矩阵相乘关键代码
MUL_AB: ;矩阵相乘
MOV DI, 0
MOV HH, 0
;--------嵌套循环-------------
MUL_0:
MOV LL, 0
;---------------------
MUL_1:
MOV BX, HH ;HH为空,BX清零
ADD BX, HH
MOV SI, LL ;LL为空,SI清零
ADD SI, LL
MOV CX, LA ;将4传给CX
;---------------------
MUL_2:
MOV AX, MA[BX] ;矩阵一的第一个数放进AX
MOV DX, MB[SI] ;矩阵二的第一个数放进DX
MUL DX ;两数相乘
ADD MC[DI], AX ;结果矩阵第一数先放上AX
ADD BX, 2 ;地址往下移
ADD SI, 2 * LB ;地址下移矩阵二列数*2
LOOP MUL_2
;---------------------
ADD DI, 2 ;地址往下移
INC LL ;列数加1
CMP LL, LB ;比较结果矩阵列数与矩阵二的列数
JNZ MUL_1
;---------------------
ADD HH, LA ;结果矩阵行数
CMP HH, HA * LA ;比较结果矩阵行数数与矩阵一的行数与列数的乘积JB MUL_0
RET
2.十进制转换关键代码
PRINT_AX: ;将存在AX中的数按照十进制输出
PUSH BX
PUSH CX
PUSH DX
MOV BX, 10
MOV CX, 0
P_LOP1:
MOV DX, 0