矩阵相乘-汇编课设_第1页
矩阵相乘-汇编课设_第2页
矩阵相乘-汇编课设_第3页
矩阵相乘-汇编课设_第4页
矩阵相乘-汇编课设_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学汇编语言程序设计课程设计说明书附件1:学 号: 0120910340318课 程 设 计题 目矩阵相乘运算学 院计算机科学与技术专 业计算机科学与技术班 级计算机0903班姓 名易驰杰指导教师张霞2012年1月3日课程设计任务书学生姓名: 易驰杰 专业班级: 计算机0903班 指导教师: 张霞 工作单位:计算机科学与技术学院 题目: 矩阵相乘运算初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 模拟两个二维数组;2) 实现两个二维数组相乘,并将结果采用矩阵在屏幕上输出;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程实验2.42)IBMPC汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录1.需求说明42.开发环境43.设计说明44.详细的算法描述.55.源程序与执行结果6 5.1 源程序6 5.2执行结果12 5.2.1 测试方法12 5.2.2 测试结果12 5.2.3 出错处理126.使用说明137.总结148.参考文献.14矩阵相乘运算的实现1 需求说明11 在这个演示的程序中,将对两个矩阵实现相乘的运算,并在计算机屏幕 终端显示运算的结果。 12 数据由用户从键盘输入,其相关的数据定义为:输入的数据的范围要在0099之间,如果输入的数据不满足条件的时候提示要求用户重新输入合法的数据。 13 对两个矩阵相乘的数据结果以3行5列的格式显示出来,能给人一种视觉上的舒服感受。14 演示程序以用户和计算机对话的方式执行,即在计算机的终端上的“信息提示”下进行相关的数据的输入和操作。2 开发环境 Windows xp VisualASM汇编语言可视化继承开发工具3 设计说明3.1对于这次设计的矩阵乘法,经过分析后可以发现虽然计算存在规律,但是输入数据没有规律。所以我就将其设计为一个循环运算的程序,这样我就把没有规律的数据有规律的存放在连续的内存单元中,使数据在循环计算的过程中其地址(位移量)有规律的变化,利用变址寄存器或者基址寄存器来间接的访问它们,每循环一次修改一次寻址寄存器使之指向下一个数据元素。3.2把输入的数据以矩阵的书写习惯显示出来,故程序在接收输入数据的时候要有一个控制,但是由于数据的输入本身就是一个循环,所以我设计为:为数据输入添加一个循环,即用一个双存循环来控制矩阵的列数从而可以解决这个问题。3.3此程序的功能可以分解为三个大的部分,第一部分就是实现数据的接收与保存;第二部分就是实现两个矩阵的乘法运算以及结果的保存;第三部分的功能就是实现对第二部分运算结果的输出显示。所以在这个程序编写里面可以将对数据的输入和数据的输出分别写一个子功能程序,然后在主程序里面调用就可以使程序易读性和健壮性都得到增强。4 详细的算法描述 4.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 b23 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.2把a00,a01,a02顺序放在Matrix1命名的字节变量中,而将b00,b01,b02,b03存放在以Marix2命名的字节变量中,先假设每一个数据占一个字节,则在数据段里应如下分配内存(定义数据): Matrix1 db 12dup(?) Matrix2 db 20dup(?) Result db 15dup(?) 这样数据的存放就有规律了,只要其中的一个数据的存放地址给定了,其余的各个数据的存放地址就可以随之确定,其间只是相差一个常数。例如OFFSET Matrix1 取的是a00的存放地址(位移量),而a01的存放地址与a00的存放地址的距离是1,a02和a01的存放地址的距离是1,依次下去。这样存放的数据就可以使用变址寄存器或者基址寄存器来间接的访问和使用它们。4.3 对于矩阵的相乘的实现,一共有三道循环,第一个最内部的循环就是在定行与定列的相乘时候四个数据的相乘后相加的循环;然后外部的一个循环就是关于定行选择不同列进行相乘的循环;最外面的一个循环就是关于选行的循环。不过三个循环实现起来的深度有点大,可以把最外面的一道循环写成三次分别调用,这样可以使程序容易实现,看起来更清楚明白。5 源程序与执行结果 51 源程序如下:DATA SEGMENT ;数据段定义 INFORMATION1 DB Please enter the matrix1!The array is 3*4!$ ;提示说明 INFORMATION2 DB Please enter 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 DL,0dh INT 21h ENDM 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,DL 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 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 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 MOV DX,0 MOV CX,4 ;设置循环次数 again: MOV AL,matrix1DI MOV AH,0 ;取矩阵1的偏移地址 MOV BL,matrix2SI ; 取矩阵2的偏移地址 MOV BH,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 INC DI ;count MOV BL,10 MOV DL,bufDI 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 MOV 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 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 DIV 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.2 执行结果5.2.1 测试方法首先,我们按照要求输入第一个3*4型矩阵(也就是12个数据),假如为1 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.2 测试结果在输入数据的时候第一次输入的为3*4矩阵,所以输入的数据为12个,当12个数据输入结束后程序自动转行并提示输入的二个矩阵即4*5的矩阵,所以第二次输入的数据是20个,输入数据结束后程序自行进行计算并显示出结果。执行的结果如下:5.2.3 出错处理在输入数据的时候,如果输入了不合法的字符,例如字母程序将显示信息提示用户重新输入新的合法数据。输入的数据只能在0到99的范围内,所以最后的3*5型矩阵最多是4位数。6 使用说明1.本次程序的使用说明,我们先把源程序拷贝到一个文本文件中,并把它命名为一个汇编程序的格式(*.asm),如yichijie.asm2.我们在dos中找到masm.exe与link.exe文件所在的文件夹Masm3masm yichijie Masm3link yichijie Masm3yichijie3.进行链接和运行后,会生成相应的.obj和.exe文件,如下所示:7 总结此次的汇编课程设计是在所有复习考试的时间中完成的,加上因为元旦回家参加姐姐婚礼,所以完成的很是匆忙,在课程设计的这个时间中,我的程序也是错误不断,但是经过反复地调试最终还是苦尽甘来,感觉付出了还是有回报的。我的课程设计的题目是矩阵的相乘,我的脑海中开始浮现了用C+实现的算法,开始感觉应该是不难的。可是无奈发现这是汇编的课设,我要想的是用汇编的语言来写程序,心中不免又开始焦急起来,发现我还有许许多多的问题有待解决。比如:汇编程序的格式只记得一般都有代码段和数据段,但具体怎么写?菜单,我要怎么设置字符串变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论