版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学汇编语言程序设计课程设计说明书学 号: 01201010340329课 程 设 计题 目矩阵相乘运算学 院计算机科学与技术学院专 业计算机科学与技术专业班 级姓 名指导教师20年月日课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院 题目: 矩阵相乘运算初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰
2、写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 模拟两个二维数组;2) 实现两个二维数组相乘,并将结果采用矩阵在屏幕上输出;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)ibmpc汇编语言程序设计实验教程实验2.42)ibmpc汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报
3、告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录1 问题分析 41.1 具体任务 41.2 输入 41.3 输出 41.4 子程序 42 程序设计 42.1 数据段定义 42.2 回车子程序ent和输出空格子程序spa 52.3 提示输入错误 error 52.4 输入子程序 input 52.5 输出子程序 output 62.6 矩阵相乘子程序 multi 72.7 主程序 83 调试过程与结果 83.1 调试过程 83.2 输出结果 94 总结 105 参考文献 106 附录 11矩阵相乘运算1 问题分析1.1 具体任务(1)模拟两个二维数组;(2)实现两个二维
4、数组相乘,并将结果采用矩阵在屏幕上输出;(3)程序采用子程序结构,结构清晰;(4)友好清晰的用户界面,能识别输入错误并控制错误的修改。1.2输入根据题意,该程序输入为两个数组。我将两个数组大小分别设定为3*4和4*5,输入的数字大小范围为09。1.3 输出该程序输出为一个矩阵。因为输入的矩阵为3*4和4*5,所以输出的矩阵大小为3*5,即以3行5列的形式输出两数组相乘的结果。1.4 子程序分析任务,将子程序分成7个,作用分别是输入数据、提示输入错误、回车、空格、矩阵相乘和两个输出。2 程序设计2.1 数据段定义提示输入的语句:(1)please enter the matrix1! the m
5、atrix1 is 3*4.$ (2)please enter the matrix2! the matrix2 is 4*5.$ (3)please input the number(number is from 0 to 9):$提示输入错误语句:the last number is error! please input the number again:$提示矩阵的数据内容:(1)the matrix1:$ (2)the matrix2:$ (3)the result of matrix1*matrix2:$定义3个数组x、y、z:(1)x db 12 dup(?) (2)y db 2
6、0 dup(?) (3)z dw 15 dup(?)2.2 回车子程序ent和输出空格子程序spa该程序为输出格式调整的子程序。程序如下: mov ah,02h mov dl,20h int 21hdl中储存的数字根据程序不同进行改变。空格为20h,回车为0dh和0ah。2.3 提示输入错误error输出语句“the last number is error! please input the number again:”2.4 输入子程序intput调用函数前先传递参数cl,传递的数据为数组大小。2.5 输出子程序output和outp将存储器中的2进制转换为10进制输出的流程图为:siz的
7、地址axsiax/100blahdlaldldl+30输出数字alblah0ax/10blahdlaldldl+30输出数字dlbldldl+30输出数字结束开始输出矩阵格式为(其中row为行数col为列数,a为数组):output (int row, int col, int a)1 n0;2 for i1 to row3 for j1 to col4 print(an);5 n+;6 spa();7 ent();2.6 矩阵相乘子程序multi2.7 主程序主程序过程为:开始调用输入程序输入数组1调用输入程序输入数组2调用矩阵相乘子程序调用输出程序结束。3 调试过程与结果3.1 调试过程出
8、现的错误有:(1)x和y数组为db型,相乘后储存结果的数组应为dw型,定义时出错,导致子程序不能执行,提示错误。同样类型的错误还出现在multi和output子程序中,循环执行储存结果时数组的下标每次只加了1,结果导致程序不能运行或结果出错。(2)multi程序中最外层循环没有及时更新di的值,导致输出时第二行和第三行第一列的结果出错,显示上一行的数据。(3)进行乘法运算时将语句写成了mul ax,bx,同类型的出错还出现在output子程序中,将除法语句写成div dx,10。这类错误都是因为忘了乘除法的规则。(4)输出结果时矩阵格式不整齐,将格式进行了调整,输出3位数,不够3位的用0补齐。
9、3.2 输出结果(1)(2)4 总结当看到题目是矩阵的乘法,脑海中几乎立即想出了利用c+完成问题的大概结构,便觉得应该不难。但是当真正开始编程的时候才发现汇编编程和c+编程有很大不同,便出现了各种各样的麻烦。汇编编程因为参数的传递比较麻烦致使数组大小的设定都无法实现灵活性。因为汇编程序的输入的数据为ascii码,需要进行处理才能被正确储存,所以输入个位数和输入多位数的差别非常大,相较个位数的输入,多位数的输入需要利用结束符去判断一个数据是否已全部输入,还需要对之前的数据进行*10运算,除此之外储存数据用的数组的类型都要扩大,几乎改变了整个程序。为了简便,只好在编程前设定好矩阵的大小为3*4和4
10、*5,结果矩阵为3*5,输入数据的范围为09。在编写子程序时,本想一次性将所有小型的子程序全部编写完整,但在运行时却出现故障,软件也不提示不出是哪里出现了错误,只好将子程序分解,一个一个的进行调试,再合并在一起。这说明了即使是个小的子程序也需要一步一步进行调试,不能想着一步登天。总之,这次的课程设计让我收益颇丰。5 参考文献1沈美明,温东婵. ibmpc汇编语言程序设计(第2版)m.北京:清华大学出版社,2007.2孙红霞.算法设计与分析m.武汉:武汉大学出版社,2007.附 录源程序datas segment ifor1 db please enter the matrix1! the ma
11、trix1 is 3*4.$ ifor2 db 0dh,0ah,please enter the matrix2! the matrix2 is 4*5.$ pm1 db 0dh,0ah,please input the number(number is from 0 to 9):$ pm2 db 0dh,0ah,the last number is error! please input the number again:$ ma1 db 0dh,0ah,the matrix1:$ ma2 db 0dh,0ah,the matrix2:$ ma3 db 0dh,0ah,the result
12、of matrix1*matrix2:$ x db 12 dup(?) y db 20 dup(?) z dw 15 dup(?)datas endscodes segment assume cs:codes,ds:datasmain proc far mov ax,datas mov ds,ax mov ah,09h lea dx,ifor1 int 21h lea dx,pm1 int 21h mov cl,0ch lea si,x call input lea dx,ifor2 int 21h lea dx,pm1 int 21h mov cl,14h lea si,y call inp
13、ut lea dx,ma1 int 21h call ent mov cx,0304h lea si,x call outp lea dx,ma2 int 21h call ent mov cx,0405h lea si,y call outp call multi lea dx,ma3 int 21h call ent call output mov ah,4ch int 21hmain endpinput proc near push ax push cx push si call enta1: mov ah,01h int 21h cmp al,30h jb a3 cmp al,39h
14、ja a3 sub al,30h mov si,al inc si cmp cl,01h jz a2 call spaa2: loop a1 pop si pop cx pop ax reta3: call error jmp a1input endperror proc near push ax push dx lea dx,pm2 mov ah,09h int 21h call ent pop dx pop ax reterror endpoutp proc near push ax mov ah,02h mov bl,clb1: mov cl,blb2: mov dl,si add dl
15、,30h int 21h call spa inc si dec cl jnz b2 cmp ch,01h jz b3 call entb3: dec ch jnz b1 pop ax retoutp endpoutput proc near lea si,z mov cx,3c1: push cx mov cx,5c2: push cx mov ax,si mov cl,100 div cl mov bl,ah mov dl,al add dl,30h mov ah,2h int 21h mov al,bl mov ah,0 mov cl,10 div cl mov bl,ah mov dl
16、,al add dl,30h mov ah,02h int 21h mov dl,bl add dl,30h mov ah,02h int 21h call spa pop cx add si,2 loop c2 call ent pop cx loop c1 retoutput endpent proc near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retent endpspa proc near push ax push dx mov dl,20h mov ah,02h int 21h pop dx pop ax retspa endpmulti proc near push ax mov di,0 mov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 15268-2024桑蚕鲜茧
- 2024年资产评估和法律尽职调查3篇
- 森林公园绿化养护服务协议
- 墙面翻新简易施工合同
- 岩土建设改建爆破作业安全规则
- 软件实施技师规范
- 电信服务干部管理准则
- 城市供热工程塔吊施工协议
- 科研设备招投标管理工作办法
- 珠宝典当联营合同
- 专题06手拉手模型(原卷版+解析)
- HY/T 0273.2-2023海洋灾害风险评估和区划技术导则第2部分:海浪
- Pep小学英语六年级上册教案-全册
- 北师大版二年级数学下册全册10套试卷(附答案)
- GB/T 2423.17-2024环境试验第2部分:试验方法试验Ka:盐雾
- 2024-2030年中国抹茶行业市场发展趋势与前景展望战略分析报告
- GB/T 32399-2024信息技术云计算参考架构
- 宫腔镜手术并发症及处理
- 安全生产治本攻坚三年行动方案2024~2026(工贸)
- 重庆市2024年高三年级高考一模化学试题(含答案)
- 2024版内蒙古自治区劳动合同书(临时工、季节工、农民轮换工)
评论
0/150
提交评论