ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:73.62KB ,
资源ID:20764279      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20764279.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字方阵的显示Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字方阵的显示Word文档下载推荐.docx

1、微型计算机是现代社会不可缺少的智力辅导工具,面向21世纪的学子,只有学好微机原理与接口技术这门课,掌握汇编语言编辑,调试技术及接口芯片的编程与使用,才能为以后应用微机解决工程实践中的各种技术问题(参数测试,数据采集处理,工程控制,生产自动化,设备改造与研制)打下良好基础。而作为自动化专业的学生这门课更是必须掌握的,是我们学习更深层次的专业知识的基础。比如我们以后将要接触很多的单片机,对单片机进行编程,用到的语言就是汇编语言。这次课程设计既是对我们的一次检验,也是我们的一个锻炼机会。我们可以运用自己所学的知识根据自己的想法写出程序,并在计算机上进行调试、修改可以完全按照自己的想法来做任务。2、设

2、计任务及要求2.1、主要任务将N方个(N=3,4,5)个自然数按螺旋纹路填入N*N方阵,要求程序运行时输入参数N,然后输出所需的N阶方阵,如N=4时输出显示:1 2 3412 13 14 511 16 15 610 98 72.2 、要求独立的设计出汇编程序,写出设计基本思想,设计方案及程序流程图,分析过程,调试记录与分析(屏幕截图),程序源代码与运行结果(源代码附详细注释,屏幕截图或打印) 3、程序设计基本思想 我们考虑过用算法直接设计这个程序,就是用算法控制输出数据,只要输入1到9之间任何数就可输出对应的方阵。用循环来控制输出的行和列以及数据,但这样难度很大,我们无法完成这样多次的循环嵌套

3、。最后我们采用了另一种想法。只实现n值为3,4,5各阶方阵运算,将3,4,5各阶方阵的元素,按指定的次序分别存放 到缓冲区buf1,buf2,buf3中,缓冲区dbuf存储从以上各缓冲区中截取的字符串和循环变量n,程序通过dos 终端21H的01号功能调用接收从键盘上输入3,4,5的ASCII码,将其转换为十进制数,送给循环变量n来控 制行的循环,同时设置各方阵每行输出的元素个数,送给CX寄存器,最后通过光标来定行输出的位置。 这种方案难度虽然有所降低,但仍然不太好做。操作说明:运行程序后,屏幕上会出现一个提示:“please input a number (3-5)” 当从键盘上输入3-5中

4、的一个数时就会出现其对应的螺旋方阵4、设计方案及程序流程图4.1、主程序流程图开始段寄存器初始,调用清屏子程序显示提示语退出从键盘输入字符,并判断是否是Q? Y N调用子程序SY判断输入字符是否为3?并设置为3时输出格式NN判断输入字符是否为4?并设置为4时输出格式N判断输入字符是否为5?并设置为5时输出格式N N显示关于输入错误的提示语 4.2、子程序S流程图从主程序得到输出的数据和格式(输出的行数N和列数B)设置输出数据的首地址指针SI和数据缓冲区首地址DI将要输出的数据付到数据缓冲区执行SI+1和DI+1执行列数N-1判断N是否为0在字符结尾加字符结束符$,设置输出光标的位置并用9号功能

5、输出,行数加1循环次数-1=0?5、程序源代码与运行结果 源程序及分析如下:DDATA SEGMENTBUF1 DB 1 2 38 9 47 6 5 ;n=3时输出的数据BUF2 DB 1 2 3 412 13 14 511 16 15 610 9 8 7;n=4时输出的数据BUF3 DB 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9n=5时输出的数据DBUF DB 14 DUP(?) ;用于存放每行输出的数据I1 DB 0DH,0AH,THIS IS A FANGZHEN PROGRAMME提示语 DB 0DH,0

6、AH,INPUT Q TO EXITPLEASE INPUT A NUMBER(3-5):,$I2 DB 0DH,0AH,INPUT ERROR,PLEASE REINPUT!N DB ?用于控制输出列数(包括空格)B DB 1 ;用语控制输出地方(即屏幕中的哪一行)DATA ENDSSTACK SEGMENT PARA STACK STACK设置堆栈段 DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACKMAIN: MOV AX,DATA MOV DS,AX CALL CLEAR ;调用子程序clear(清屏)

7、LOP: MOV B,1 ;将提示语从第一行输出 LEA DX,I1 ;将I1首地址付给DX MOV AH,9 ;调用9号功能,输出DX中的字符串 INT 21H MOV AH,1 ;调用1号功能,从键盘输入字符 CMP AL,Q输入字符如果是Q,则退出 JZ QUIT LEA SI,BUF1 ;设置缓冲区指针 MOV N,7 ;设置每行输出的字符数(包括空格) MOV CL,3 ;设置循环次数清屏3输入的字符如果是3则跳转到S JZ S LEA SI,BUF2 MOV N,10 MOV CL,44输入的字符如果是4则跳转到S LEA SI,BUF3 MOV CL,5 MOV N,135输入的

8、字符如果是5则跳转到S MOV AH,2 ;调用2号功能,设置光标的位置 MOV DH,1 MOV DL,0 INT 10H LEA DX,I2 ;设置提示语字符的首地址指针调用9号功能,将提示语从所设的光标位置输出 JMP LOPS: MOV BL,N LEA DI,DBUF ;设置存放输出数据的缓冲区的地址指针L: MOV AL,SI ;以下六句的功能为:将所要输 MOV DI,AL ;出数据缓冲区数据的前N个字 INC SI ;符存到缓冲区DBUF INC DI DEC BL JNE L MOV DI,BYTE PTR 在数据缓冲区DBUF末尾加$调用2号功能设置输出位置 MOV DH,

9、B ;光标的位置 INT 10H LEA DX,DBUF ;调用9号功能将缓冲区DBUF MOV AH,9 ;的数据输出 INC B LOOP SQUIT: MOV AH,4CH ;退出程序CLEAR PROC NEAR ;子程序CLEAR的功能为清屏。 PUSH AX ;将AX、BX、CX、DX入栈,保存 PUSH BX ;里面的数据, PUSH CX PUSH DX ; MOV AH,6 ;调用6号功能,以空格充满屏幕 MOV AL,0 ;达到清屏 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 MOV BH,7 MOV AH,02H MOV DH,0 POP

10、DX ;将DX、CX、BX、AX出栈 POP CX POP BX POP AX RETCLEAR ENDPCODE ENDS END MAIN运行结果如下:运行界面输入字符不是3、4、5时的界面:输入3时的结果:输入4时的运行结果:输入5时的运行结果:6、调试记录与分析经过一个学期对汇编语言的学习,对编写基本的汇编语言程序已经基本掌握了,包括用DEBUG进行调试和修改。这次课程设计中,在对自己编写的这段程序进行调试的时候仍发现了自己在这方面的不足和缺点。刚开始,将程序输入在编译时就发现了很多语法性错误,比如在堆栈段和数据段的定义上就有一些问题,导致无法进行编译或机器死机。还有,有时将输入法调错

11、导致编译时报错,等这些简单错误,只要仔细点,应该可以避免。将这些简单的错误一一改正后重新将程序进行编译连接,然后执行程序 ,发现只能输出第一行数据,比如输入5时,输出界面为:这时我首先想到的问题是循环取字符的那段程序出了问题,仔细检查后发现了错误,在循环段后再加了一个循环loop s解决了问题。 再次经过调试以后发现又出现了一个问题:在输入错误字符时界面是正确的,但输入正确数字(3.4.5)时却出现错误:经过思考,我认为是由于在一次循环,结束并将字符输出是没有结束符号$,我们仔细讨论后,将这个问题在程序中解决,加入正确代码后,界面出现正确显示。经过多次调试后程序已可以正确运行,但我注意到在联接

12、结束时会出现警告no stack segmemt,发现始终有一个警告,虽然不影响程序的执行,但是我仍然想找出原因。经过仔细查找资料后,也没有发现有关于这个问题的解答,只是发现书上对于堆栈段后面都加了这样一句话para stack “stack”.我也将它加了进去,然后再编译、连接就没有发现这个问题了,然后查找关于para的问题,发现他是关于设置段的属性的设置将程序执行以后,每输入一个字符,在显示相应的数据以后,他的下一次显示总在前一次显示的下面,这就导致在你输入很多次字符以后,他的显示已经到界面下面,已无法在界面上正确显示出来。即在对输出字符的光标控制上需进行调整,我用2号的输出功能将输出的光

13、标始终控制在屏幕的顶端,这样就不会出现由于输入字符过多而无法显示的问题了。 除了这些错误外,还出现了几个错误,但在同学们的帮助下,再加上自己查找了相关的资料后都得到解决。在这个调试过程中,我掌握了一些调试的方法,例如,当你改变一段代码后,出现了一个问题,或者一个错误,但这些错误并不在你的意料之中,你就得重新审查这段代码,看它除了会得到你想的结果外,还会跟哪些段产生联系。这些联系也许就是在自己更改代码时没有注意的,这样就可以逐步考察到这段代码给整个程序带来的影响,进而就可以逐步更改自己的程序,并进行优化。完整的程序源代码DATA SEGMENTB DB 1 CALL CLEAR MOV B,1 LEA DX,I1 MOV AH,9 MOV AH,1 LEA SI,BUF1 MOV N,7 MOV CL,3 MOV AH,2 LEA DX,I2 LEA DI,DBUF MOV AL,SI MOV DI,AL INC SI MOV DH,B LEA DX,DBUF MOV AH,4CHCLEAR PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 MOV AL,0 POP DX POP CX指导教师评语:课程设计成绩: 指导教师签名: 年 月 日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1