集美大学汇编课程设计报告_第1页
集美大学汇编课程设计报告_第2页
集美大学汇编课程设计报告_第3页
集美大学汇编课程设计报告_第4页
集美大学汇编课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上汇编语言程序设计课程设计题目:题目四数的处理三专业: 计算机科学与技术 学号: 3 姓名: 江玲微 2013-2014学年第一学期一设计目的(1)了解并掌握汇编语言设计的一般方法,具备初步的独立分析和设计能力;(2)掌握显示输出、键盘输入DOS功能调用的使用方法;(3)学习汇编程序的总体设计与应用方法。二设计内容从键盘输入一个4*4的矩阵。要求:(1) 每个元素都是4位的十进制数。(2) 在屏幕上输出该矩阵和它的转置矩阵。(3) 输出这两个矩阵的和(对应元素相加)。三 程序设计原理(1)输入矩阵的方法:调用输入一个四位数的子程序INPUT,并用一个内外循环使输入的一串

2、数字以矩阵的形式显示,并将矩阵保存在matrix1单元中。子程序INPUT描述:A.保护寄存器,并将AX清零,防止影响下一个输入的数; B.设置循环次数,输入一个字符,并判断是否是数字,是则继续新输入; C.循环输入四个数字,并将输入的四个数字转换成数字,并保存在C1中; D.恢复寄存器。(2)输出矩阵的方法:设置指针SI指向matrix1单元的首地址,后调用子程序OUTPUT输出矩阵。 子程序OUTPUT描述:A.设置输出的行数和列数; B.将matrix1单元中的内容即SI中的内容送给AX,后调用子程序SC显示一个十进制数。 C.显示一个空格,调整指针指向下一个数; D.列输入结束,行输入

3、结束。子程序SC描述:A.将AX依次除以10000,若商为0,说明输出的是四位的十进制数,就跳至显示空格并继续将余数除以1000、100、10并将商和最后的余数依次输出; B.若商不是零则依次将余数除以1000、100、10并将商和最后的余数依次输出。(3)矩阵转置的方法:运用传送字符串的方法先将matrix1单元中的内容依次送到matrix2单元中,后调用子程序ZH将matrix2中的内容进行转置。 子程序ZH描述:对角线上的数无需进行交换,第一行和第一列只要交换三个数字,第二行和第二列只要交换两个数字,第三行和第三列只要交换一个数字,总共交换三次即可。A. 保护寄存器,设置外循环次数3;B

4、. 设置BX、SI、DI、的初始值,并设置内循环次数DX;C. 交换相应位置的数字,先判断内循环是否结束;D. 判断外循环是否结束,恢复寄存器。(4)显示转置矩阵:将SI清零,将指针SI指向matrix2单元的首地址,后调用子程序OUTPUT即可显示转置矩阵。子程序OUTPUT的描述在(3)中。(5)矩阵相加:将指针SI指向matrix1单元的首地址,将指针DI指向matrix2单元的首地址,调用子程序ADDUP进行矩阵相加,并将相加后的结果保存到matrix3单元中。子程序ADDUP描述:A.保护寄存器,并将DX清零,设置循环次数16; B将matrix1单元中的内容存到AX中,将matri

5、x2单元中的内容存到BX中,把相加后的结果保存到AX中,并送到matrix3单元中,依次循环16次; D.恢复寄存器。 (6)输出相加后的矩阵:将指针SI清零并指向matrix3单元的首地址,后调用子程序OUTPUT即可。四程序流程图主程序流程图: 子程序INPUT: 子程序ZH: 子程序OUTPUT:子程序ADDUP: 子程序ZH:专心-专注-专业 五源程序DATA SEGMENTSTR DB 'please input the 4*4 matrix :','$' ;提示输入矩阵STR1 DB 0DH,0AH,'the original matrix:

6、','$' ;提示输出原矩阵STR2 DB 0DH,0AH,'the transposed matrix:','$' ;提示输出转置矩阵STR3 DB 0DH,0AH,'the answer is:','$' ;提示输出矩阵相加的和C1 DW 0C2 DW 10N EQU 4matrix1 DW 16 DUP(?) ;定义存储原矩阵的空间matrix2 DW 16 DUP(?) ;定义存储转置矩阵的空间matrix3 DW 16 DUP(?) ;定义存储相加后的矩阵的空间 DATA ENDSenter MA

7、CRO ;编写回车换行的宏,便于后面调用 MOV AH,02H MOV DL,10 INT 21H MOV DL,13 INT 21HENDMCLS MACRO ;编写清除全屏的宏 MOV AH,6 ;屏幕初始化 MOV AL,0 ;全屏空白 MOV BH,7 ;卷入行属性(黑底白字,正常显示) MOV CH,0 ;左上角行号 MOV CL,0 ;左上角列号 MOV DH,24 ;右上角行号 MOV DL,79 ;右上角列号 INT 10H ;BIOS调用 MOV DX,0 ;把光标定位在0行0列 MOV AH,2 MOV BH,0 INT 10HENDMCODE SEGMENT ;定义代码段

8、 ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX CLS LEA DX,STR ;提示输入矩阵 MOV AH,09H INT 21H enter ;回车换行 MOV SI,0 MOV CX,4 ;设置循环次数K0: MOV BX,4 L0: CALL INPUT ;调用输入一个四位数的子程序 MOV AX,C1 ;将输入的的数字存到matrix1单元中 MOV matrix1SI,AX ADD SI,2 MOV AH,2 MOV DL,20H INT 21H MOV C1,0 DEC BX JNZ L0

9、enter LOOP K0 ;输入结束 LEA DX,STR1 MOV AH,09H INT 21H enter MOV SI,0 LEA SI,matrix1 CALL OUTPUT ;调用输出矩阵子程序 LEA DX,STR2 ;显示输出转置矩阵的提示信息 MOV AH,09H INT 21H enter LEA SI,matrix1 ;将matrix1单元中的内容传到matrix2单元中 LEA DI,matrix2 MOV CX,16 CLD REP MOVSW MOV SI,0 ;SI清零 LEA SI,matrix2 ;将matrix2的首地址赋给SI CALL ZH ;调用转置矩

10、阵子程序,将matrix2中的内容改变 CALL OUTPUT ;调用矩阵输出子程序显示转置后的矩阵 LEA DX,STR3 MOV AH,09H INT 21H enter MOV SI,0 ;矩阵相加程序 MOV DI,0 MOV BP,0 MOV CX,0 LEA SI,matrix1 LEA DI,matrix2 CALL ADDUP MOV SI,0 LEA SI,matrix3 CALL OUTPUT ;输出相加后的矩阵 MOV AH,4CH INT 21HZH PROC NEAR ;矩阵转置子程序 PUSH SI ;保护现场 PUSH DI MOV CX,N-1 ;设置外循环次数

11、 MOV BX,2 ;设置初始值 MOV SI,2 MOV DI,2*N LOP1: MOV DX,CX ;设置内循环次数 LOP2: MOV AX,matrix2SI ;进行数字的交换 XCHG AX,matrix2DI MOV matrix2SI,AX ADD SI,2 ADD DI,8 DEC DX JNZ LOP2 ;完成第一行和第一列的交换 MOV DI,BX ADD DI,4*N ADD BX,2*(N+1) MOV SI,BX LOOP LOP1 ;外循环结束,转置完成 POP DI ;恢复现场 POP SI RETZH ENDPINPUT PROC NEAR ;输入一个四位数字

12、的子程序 PUSH AX ;保护现场 PUSH BX PUSH CX PUSH DI XOR AX,AX ;清零S: MOV DI,4 ;设置循环次数S1: DEC DI MOV AH,01H ;输入一个字符 INT 21H CMP AL,30H ;判断是否是数字 JB S CMP AL,39H JA S XOR BL,BL ;清零 MOV BL,AL SUB BL,30H ;把ASC码转换成数字 XOR DX,DX ;清零 MOV AX,C1 ;保存累加后的数字 MUL C2 ADD AX,BX MOV C1,AX CMP DI,0 ;判断循环是否结束 JNZ S1 POP DI ;恢复现场

13、 POP CX POP BX POP AX RETINPUT ENDPOUTPUT PROC NEAR ;输出矩阵子程序 MOV CX,4 ;设置输出的行数L1: PUSH CX MOV CX,4 ;设置输出的列数L2: PUSH CX CALL SC MOV DL,20H ;显示空格 MOV AH,02H INT 21H POP CX ADD SI,2 LOOP L2 ;列输出完毕 enter POP CX LOOP L1 ;行输出完毕 RETSC PROC NEAR ;输出一个十进制数的子程序 MOV DX,0 MOV AX,SI MOV CX,10000 DIV CX MOV BX,DX

14、 ;将余数送到BX中 MOV DL,AL ;将商送到DL中进行判断 CMP DL,0 JZ L3 ADD DL,30H MOV AH,02H INT 21H JMP L4L3: MOV DL,20H ;若是四位的十进制数,则先显示空格,以便对齐 MOV AH,02H INT 21HL4: 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 ADD DL,30H ;

15、显示下一位 MOV AH,2H INT 21H L5: 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 RETSC ENDPOUTPUT ENDP ;矩阵相加子程序ADDUP PROC NEAR PUSH AX PUSH BX MOV DX,0 MOV CX,16 ;设置循环次数J0: XOR AX,AX ;清零 XOR BX,BX XOR DX,DX ;进行矩阵

16、相加,并将相加后的每一个数存入matrix3中 MOV AX,SI MOV BX,DI ADD AX,BX ADD DX,AX MOV matrix3BP,DX ADD BP,2 ADD SI,2 ADD DI,2 LOOP J0 POP BX POP AX RETADDUP ENDPCODE ENDS END START六调试过程七遇到的问题及解决方法1.因为本程序要多次用到回车换行,因此定义了一个回车换行的宏便于调用。2.输入矩阵时调用的子程序INPUT编写的时候出现问题: (1)因为调用01号功能输入字符,存在AL中的是ASC码,所以还应该将输入的四位字符进行转换成实际的四位十进制数的形

17、式; (2)没有将AX清零,因而影响到后面累加后的结果导致输出发生错误。3.输出矩阵子程序OUTPUT出现的问题:(1)没将地址指针SI清零;(2)输出矩阵时发现类似10086的数字只会显示1086而中间少了个0。是因为在L3中多加了一句判断DL是否为零的语句导致结果出现错误;(3)在显示相加后的矩阵时,会有四位和五位的导致显示时会不对齐。这样在输出四位的十进制数时就应在其前方加一个空格。但这时又出现了一个问题:在没编写SC子程序时,将其直接放在OUTPUT子程序中时,出现下面的问题因此采用在子程序OUTPUT中再调用SC子程序,解决了此问题。4.转置矩阵子程序编写时出现的问题:(1)初始值设置不对导致转置错误;(2)内循环的设置方法不对,没有想到用

温馨提示

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

评论

0/150

提交评论