微机原理数字方阵课程设计.docx
《微机原理数字方阵课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理数字方阵课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
微机原理数字方阵课程设计
信息工程学院
课程设计报告
设计题目:
数字方阵
名称:
微机原理与接口课程设计
班级:
通信1101班
姓名:
学号:
设计时间:
2013.12.8至2013.12.21
指导教师:
徐明鹃王本有
评语:
评阅成绩:
评阅教师:
一、课程设计的性质和目的
《微机原理与接口技术》这门课以Intel微处理器为背景,围绕“基础”、“主线”和“关键技术”展开。
使我们掌握微型计算机的基本概念,介绍CPU、汇编程序设计及32位汇编程序设计简介、存储器、I/O接口;结合微处理器的发展历程,使我们了解微型计算机在不断克服瓶颈效应,提高性能和速度方面,采用的技术和方法,如Cache、虚拟存储、超标量流水线,将微型计算机的技术发展作为贯穿教材的主线;将微型计算机的关键技术如存储管理、中断、DMA、系统总线、与外设的接口等作为的重点。
微型计算机是现代社会不可缺少的智力辅导工具,面向21世纪的学子,只有学好《微机原理与接口技术》这门课,掌握汇编语言编辑,调试技术及接口芯片的编程与使用,才能为以后应用微机解决工程实践中的各种技术问题(参数测试,数据采集处理,工程控制,生产自动化,设备改造与研制)打下良好基础。
而作为自动化专业的学生这门课更是必须掌握的,是我们学习更深层次的专业知识的基础。
比如我们以后将要接触很多的单片机,对单片机进行编程,用到的语言就是汇编语言。
二、课程设计的要求
独立的设计出汇编程序,写出设计基本思想,设计方案及程序流程图,分析过程,调试记录与分析(屏幕截图),程序源代码与运行结果(源代码附详细注释,屏幕截图或打印)
三、主要仪器设备及软件
PC机、MASM汇编软件。
四、课程设计题目及要求
显示一个数字的方阵,提示输入一个3-5的数字,根据输入的数字显示方阵,如输入4,输出
1234
1213145
1116156
10987
当输入q时,退出运行界面。
实现n值为3,4,5各阶方阵运算,将3,4,5各阶方阵的元素,按指定的次序分别存放到缓冲区buf1,buf2,buf3中,缓冲区dbuf存储从以上各缓冲区中截取的字符串和循环变量n,程序通过dos终端21H的01号功能调用接收从键盘上输入3,4,5的ASCII码,将其转换为十进制数,送给循环变量n来控制行的循环,同时设置各方阵每行输出的元素个数,送给CX寄存器,最后通过光标来定行输出的位置。
这种方案难度虽然有所降低,但仍然不太好做。
操作说明:
运行程序后,屏幕上会出现一个提示:
“pleaseinputanumber(3-5)”
当从键盘上输入3-5中的一个数时就会出现其对应的螺旋方阵
五、课题分析及设计思路
1.主程序流程图
开始
段寄存器初始,调用清屏子程序
显示提示语
退出
从键盘输入字符,并判断是否是q?
Y
N
调用子程序S
Y
判断输入字符是否为3?
并设置为3时输出格式
NN
调用子程序S
Y
判断输入字符是否为4?
并设置为4时输出格式
N
调用子程序S
Y
判断输入字符是否为5?
并设置为5时输出格式
NN
显示关于输入错误的提示语
2、子程序S流程图
开始
从主程序得到输出的数据和格式(输出的行数N和列数B)
设置输出数据的首地址指针SI和数据缓冲区首地址DI
将要输出的数据付到数据缓冲区执行SI+1和DI+1
执行列数N-1
N
判断N是否为0
在字符结尾加字符结束符$,
Y
设置输出光标的位置并用9号功能输出,行数加1
N
循环次数-1=0?
Y
六、程序主要代码与分析
源程序及分析如下:
DATASEGMENT
BUF1DB'123894765';n=3时输出的数据
BUF2DB'12341213145111615610987';n=4时输出的数据
BUF3DB'12345161718196152425207142322218131211109';n=5时输出的数据
DBUFDB14DUP(?
);用于存放每行输出的数据
I1DB0DH,0AH,'Thisisafangzhenprogramme!
';提示语
DB0DH,0AH,'Inputqtoexit'
DB0DH,0AH,'pleaseinputanumber(3--5):
','$'
I2DB0DH,0AH,'Inputerror,pleasereinput!
','$'
NDB?
;用于控制输出列数(包括空格)
BDB1;用于控制输出地方(即屏幕中的哪一行)
DATAENDS
STACKSEGMENTPARASTACK'STACK';设置堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT;代码段
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK;assume是设定段寄存器和段之间的关系,
;在程序中必须明确段和段寄存器的关系
MAIN:
MOVAX,DATA
MOVDS,AX
CALLCLEAR;调用子程序clear(清屏)
LOP:
MOVB,1;将提示语从第一行输出
LEADX,I1;目标地址传送指令将I1首地址付给DX
MOVAH,9;调用9号功能,输出DX中的字符串
INT21H
MOVAH,1;键盘输入并回显
INT21H
CMPAL,'q';输入字符如果是q,则退出
JZQUIT
LEASI,BUF1;设置缓冲区指针
MOVN,7;设置每行输出的字符数(包括空格)
MOVCL,3;设置循环次数
CALLCLEAR;清屏
CMPAL,'3';输入的字符如果是3则跳转到S
JZS
LEASI,BUF2;设置缓冲区指针
MOVN,10;设置每行输出的字符数(包括空格)
MOVCL,4;设置循环次数
CMPAL,'4';输入的字符如果是4则跳转到S
JZS
LEASI,BUF3;设置缓冲区指针
MOVCL,5;设置循环次数
MOVN,13;设置每行输出的字符数(包括空格)
CMPAL,'5';输入的字符如果是5则跳转到S
JZS
MOVAH,2;调用2号功能,设置光标的位置
MOVDH,1
MOVDL,0
INT10H
LEADX,I2;设置提示语字符的首地址指针
MOVAH,9;调用9号功能,将提示语从所设的光标位置输出
INT21H
JMPLOP
S:
MOVBL,N
LEADI,DBUF;设置存放输出数据的缓冲区的地址指针
L:
MOVAL,[SI];以下六句的功能为:
将所要输
MOV[DI],AL;出数据缓冲区数据的前N个字
INCSI;符存到缓冲区DBUF
INCDI
DECBL
JNEL
MOV[DI],BYTEPTR'$';在数据缓冲区DBUF末尾加$
MOVAH,2;调用2号功能设置输出位置
MOVDH,B;光标的位置
MOVDL,0
INT10H
LEADX,DBUF;调用9号功能将缓冲
MOVAH,9;的数据输出
INT21H
INCB
LOOPS
JMPLOP
QUIT:
MOVAH,4CH;退出程序
INT21H
CLEARPROCNEAR;子程序CLEAR的功能为清屏。
PUSHAX;将AX、BX、CX、DX入栈,保存
PUSHBX;里面的数据,
PUSHCX
PUSHDX
MOVAH,6;调用6号功能,以空格充满屏幕
MOVAL,0;达到清屏
MOVCH,0
MOVCL,0
MOVDH,24;列号
MOVDL,79;行号
MOVBH,7
INT10H
MOVAH,2;2号系统功能调用-显示输出
MOVDH,0;列号
MOVDL,0;行号
INT21H
POPDX;将DX、CX、BX、AX出栈
POPCX
POPBX
POPAX
RET
CLEARENDP
CODEENDS
ENDMAIN
七、实验结果截图
运行界面
输入字符不是3、4、5时的界面:
输入3时的结果:
输入4时的运行结果:
输入5时的运行结果:
八、心得体会
课程设计是将课本上所学的理论知识运用与解决实际的问题,对松散的理论知识的一个集合式运用,也是综合知识,综合运用能力的一个过程。
对知识的掌握和灵活运用是一个很好的考察。
由于汇编是大二时所学,那么长时间没有运用,忘了好大一部分。
当要做课程设计时,又把整本书又复习了一遍,而且我们那本课本是入门级教材。
对诸如DOS和BIOS中断的介绍也只是一个简单的叙述,当真正要使用某一功能时,我们的课本就捉襟见肘了。
因此在课程设计的过程中,图书馆和丰富的网络资源得到了充分的应用。
本次课程设计,一方面让我们再次熟悉汇编指令,再次对算法的设计有一定的理解和掌握。
另一方面让我们对较大汇编程序的编写有一个清晰的过程,学习把一个较大问题分解成若干个小问题,即子程序编写。
养成一个良好的编程习惯。
通过本次课程设计让大家掌握常用的基本汇编指令,提高了将学习的理论知识应用于解决实际问题的能力。
通过一周的课程设计使我对汇编语言有了更深的理解,对以前学习中不明白的,不理解的都有了进一步的理解。
在实际操作中遇到了很多困难,但通过找资料,请教同学和老师,使我的动手能力和沟通能力都有了提高。
在整个课程设计中总是在编写程序中发生错误,有时会很没耐性,但都被我一一克服了。
通过本次课程设计,我更加理解了书本上的理论知识,也进一步培养了将理论运用于实践,以解决实际问题的能力。
这样的经验也告诉我,学习更重要的是动手能力,只要通过动手实践才能更好的掌握所学知识,才能学以致用,更好发挥知识的优越性,体现学习的价值。
在做完这个课程设计时,心里有种说不出来的高兴,自己动手完成的设计有一种成就感,增强了自己的自信心,我相信在今后的学习中,我会保持这种良好的心情投入到各科的学习中,不断提升自己的学习能力。