汇编语言矩阵相乘课程设计(附源代码).docx
《汇编语言矩阵相乘课程设计(附源代码).docx》由会员分享,可在线阅读,更多相关《汇编语言矩阵相乘课程设计(附源代码).docx(24页珍藏版)》请在三一文库上搜索。
1、.华 北 科 技 学 院课程设计说明书班级 :姓名 :学号 :课程名称 :汇编语言课程设计课设时间 :2006-12-05 至2006-12-16成绩评定 :1、工作量:2、难易度:A (),B(), C(),D() ,F( )A(),B(), C(),D(),F( )3、答辩情况:基本操作:代码理解:4、报告规范度:5、学习态度:A(),B(),C(),D(),F( )A(),B(),C(),D(),F( )A(),B(),C(),D(),F( )A(),B(),C(),D(),F( )总评成绩 :指导教师 :.一课程设计的目的、任务1.课程设计的目的:使学生综合使用所学过的汇编语言程序设计
2、知识, 掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能, 发挥自学能力和查找资料的能力, 解决稍微复杂的结构化程序设计问题, 加深对所学知识的理解与掌握, 增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。课程设计的目的和要求:( 1)使学生巩固和加强汇编语言课程的理论知识。( 2)使学生掌握汇编语言的基本概念、语法、语义和数据类型的使用特点。( 3)使学生掌握汇编语言程序设计的方法及编程技巧,能正确使用汇编语言编写程序。(3)进一步理解与运用结构化程序设计的思想和方法;学会利用流程图或N-S 图表示算法。( 4) 使学生掌握调试程序的基本方法及上机操作方法。
3、( 5)掌握书写程设计开发文档的能力, 使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。( 6)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。( 7)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。( 8)培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。( 9)培养学生良好的程
4、序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。 学生在课程设计书写代码时, 应该严格按要求处理, 以便建立良好的程序设计风格。.2.课程设计的题目矩阵相乘( 1)要求:掌握多重循环程序的设计方法,并熟悉有关矩阵的编程原理。( 2)内容:将一个 4 X 4 的矩阵与一个 4 X 1 的矩阵相乘,将结果存入相应的单元,分别用十进制数、二进制、十六进制形式显示结果。3.课程设计环境( 1)硬件: PC机。( 2)软件:操作系统为64位Windows7 ,设计语言为 MASM FOR WINDOWS汇编语言集成实验环境。4. 课程设计要求( 1)课程设计可采取每人一题,可任选
5、一题进行设计, 至少包含五个功能模块 。或者每组完成一个课题, 每组成员分工合作完成一个课程设计, 每个人的任务不同;( 2)可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用;( 3)要求利用结构化程序设计方法以及汇编语言的编程思想来完成系统的设计;( 4)要求有欢迎界面、菜单、文件操作,数据使用数组、结构体等均可,键盘操作或鼠标操作均可;( 5)模块化程序设计:要求在设计的过程中,按功能定义过程或宏,多个模块化设计可以用文件的形式来实现;( 6)学生所选课题必须上机通过,并获得满意的结果;( 7)程序书写风格:锯齿型书写格式
6、。二软件需求分析和设计( 1)需求分析本程序主要实现的功能是一个4*4 矩阵与 4*1 矩阵相乘最后得到一个4*1 矩阵,并且要求用三种方式输出这个矩阵,分别是二进制和十六进制和十进制。并且这个程序要求菜单的选择。( 2)下面就是这个程序的流程图、.开始菜单选择输出第一个矩阵(十进制)输出第二个矩阵(十进制)矩阵相乘运算(矩阵输出流程图输出结果矩阵(十进制)开始输出结果矩阵 (十六进制)将 BX 值和地址给 AX输出结果矩阵(二进制)以十进制输出 AX 的第一个NN地址转移下个数,中间TAB 功结束列数 CX=0 ?主流程图Y行数 DX=0 ?Y结束.开始开始获得 AX 中一个数获得 AX 中
7、一个数除以 10,商放在 AX ,余数放在DX循环左移四位NAX=0 ?取出 AL 低四位加上30H 输出Y余数的出栈输出NCX=0 ?Y结束十进制矩阵输出开始获得 AX 中一个数逻辑左移一位NAL9 ?Y加上 07H 变成 A-FN输出一个数CH=0 ?Y结束十六进制矩阵输出是否进位?NYN输出 1输出 0CX=0 ?Y开始二进制矩阵输出.开始行循环数初始赋值列循环数初始赋值重新定义偏移量和CX边相乘边存储YNCX=0 ?Y第二矩阵是否有第二列?N行循环数加一是否有下一行?N开始.Y三程序实现说明 (介绍程序实现过程, 包括关键代码分析 (注意:应该限制代码的数量).1.矩阵相乘关键代码MU
8、L_AB:;矩阵相乘MOV DI, 0MOV HH, 0;- 嵌套循环 -MUL_0:MOV LL, 0;-MUL_1:MOV BX, HH;HH 为空, BX 清零ADD BX, HHMOV SI, LL;LL 为空, SI清零ADD SI, LLMOV CX, LA;将 4传给 CX;-MUL_2:MOV AX, MABX;矩阵一的第一个数放进AXMOV DX, MBSI;矩阵二的第一个数放进DXMUL DX;两数相乘ADD MCDI, AX;结果矩阵第一数先放上AXADD BX, 2;地址往下移ADD SI, 2 * LB;地址下移矩阵二列数*2LOOP MUL_2;-ADD DI, 2
9、;地址往下移INC LL;列数加 1CMP LL, LB;比较结果矩阵列数与矩阵二的列数JNZ MUL_1;-ADD HH, LA;结果矩阵行数CMP HH, HA * LA;比较结果矩阵行数数与矩阵一的行数与列数的乘积JB MUL_0RET2.十进制转换关键代码PRINT_AX:;将存在 AX 中的数按照十进制输出PUSH BXPUSH CXPUSH DXMOV BX, 10MOV CX, 0P_LOP1:MOV DX, 0.DIV BX;直接除以 10,余数在DX 一次输出一个INC CXPUSH DXCMP AX, 0;商存在 AX 中,接着用来取余数放到DX 里面JNZ P_LOP1M
10、OV AH, 2P_LOP2:POP DXADD DL, 0INT 21HLOOP P_LOP2;CX 自加多少次,就自减多少次,输出整个数POP DXPOP CXPOP BXRET3.十六进制转换关键代码HSP PROC FAR;十六进制转换子程序PUSH BXPUSH CXPUSH DXMOV BX,AXMOV CH,04D;CH初始定义为 4ROTATE:MOV CL,04D;CL 初始定义为 4ROL BX,CL;对操作数进行循环左移4次,每执行一次,把最高位移到最低位,同时还把最高位移到CFMOV AL,BLAND AL,0FH;取 AL 的低四位ADD AL,30H;加上 30H输
11、出CMP AL,9;AL 与 9比较JBEPRINT2;小于等于就会跳到PRINT2ADD AL,07H;大于 AL 加上 07H ,变成字母 ABCDEFPRINT2:MOV DL,AL;AL 给 DL 输出出来MOV AH,2INT 21HDEC CH;ch自减,不为零继续循环上面代码JNE ROTATEMOV AH,2MOV DL,HINT 21HPOP DXPOP CX.POP BXRETHSP ENDP4.二进制转换关键代码DSP PROC FAR;二进制转换子程序PUSH BXPUSH CXPUSH DXMOV BX,AX;把数值放到 BX 保护起来, BX 中本身放的就是二进制M
12、OV CX,16;为循环做准备T:SHL BX,1;把 BX 的值向左移一位,其高位放在CF标志位里JC PRINT4;如果高位是 1就输出 1JNC PRINT5;如果高位是 0就输出 0PRINT4:MOV DL,31H;把要在屏幕上输出的字符预先放到DL 寄存器里, 31H表示字符 1MOV AH,2INT 21HJMP LPRINT5:MOV DL,30H;把要在屏幕上输出的字符预先放到DL 寄存器里, 31H表示字符 0MOV AH,2INT 21HL:LOOP TMOV AH,2MOV DL,BINT 21HPOP DXPOP CXPOP BXRETDSP ENDP5. 运行结果截
13、图菜单截图.矩阵一矩阵二和相乘后矩阵截图(十进制)矩阵三十六机制和二进制截图.四程序总结( 软件完成情况,有哪些收获,存在哪些不足对课程设计有哪些建议)这次课设我完成的主要是矩阵的相乘和输出矩阵的进制转换,以及光标定位,菜单输出等等功能!这次课设的时间有两周,其实主要完成在最后一周,通过这次试验最大的收获就是看程序一定要耐心, 虽然程序是我拼凑而成, 但是基本上已经读懂整个程序,途中遇见几个问题,非常感谢老师和同学们的帮助,最终完成了这个程序。存在的不足之处就是这两个矩阵是固定格式的,不能任意矩阵相乘,希望以后可以改进,这个课设学习了很多,新的知识主要是 BOIS 功能的调用,主要集中在字体颜
14、色变化和光标的定位,还学到了矩阵相乘中的嵌套循环,这个对于循环反复操作不同的数非常的重要!另外还了解了进制转换的方法,也是利用了循环移位的操作,本来我觉得汇编是个令人头疼的语言,但是你只要紧紧抓住它其中数的变化就行,能够准确定位数的位置及作用,而且还要了解数的及时清零与更新!往往其中很容易混淆的就是数的位置和作用,之前很容易的辨认错误!这次的实验还是学到了很多东西,主要感谢老师和同学的指导,总体上来说, 完成了基本课设要求!希望在以后的学习中,也应该有那种细心钻研的精神!源代码:DATA SEGMENT;=菜单的定义 =str1db *Menu:*,13,10mess1 db *1:print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 矩阵 相乘 课程设计 源代码
链接地址:https://www.31doc.com/p-6198716.html