汇编语言课程设计数字方阵_第1页
汇编语言课程设计数字方阵_第2页
汇编语言课程设计数字方阵_第3页
汇编语言课程设计数字方阵_第4页
汇编语言课程设计数字方阵_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、摘 要 汇编语言编程不仅具有计算机提供给用户的最快而又最有效的语言的优势,也可以在不很了解计算机硬件的前提下使用它。在对于程序的空间和时间要求很高的场合,使用汇编语言是必不可少,甚至对于很多需要直接控制硬件的应用场合,用保护模式下的汇编语言编程也提供给了对硬件不了解的初学者一种方法。本次课程设计,是使用汇编作为开发语言完成数字方阵程序设计,即用户输入数字n,程序输出n阶方阵。本文主要分为问题描述、程序设计、代码实现、运行结果分析和课程设计总结几个部分。完整的表述了程序设计的全部过程及所涉及的基本思路和功能模块的代码实现。在代码编写中,还附加有文字说明,增加程序可读性。各个部分紧密联系,相互贯通

2、,保证最终程序设计得以完整并正确的实现。其中,问题描述阐述所要解决的问题、实现的功能;程序设计绘制程序流程图,作为程序编写的依据;代码实现主要列出本程序设计中涉及的主要模块的代码;运行结果分析为程序初步完成基础上的程序调试和功能测试,确保程序设计正确,能实现所要求的功能;通过课程设计总结对本次课程设计得失进行总结。总结遇到的问题、解决途径以及学到的知识,新掌握的编程技巧等。最后,附上源程序清单及参考文献。关键词:汇编语言,数字方阵,编程技巧,课程设计目录摘 要I1 问题描述12 程序设计22.1题目基本内容22.2系统流程框图22.2.1 主程序流程图22.2.2 子程序工作流程32.3程序设

3、计分析33 主要代码实现43.1 主模块代码43.2 显示方阵模块代码53.3 显示控制模块代码64 运行结果分析85 课程设计总结9参考文献10附录11源程序代码111 问题描述本程序设计主要要求用汇编语言实现数字方阵的创建。程序提示用户输入任一数字n,系统接收该数字,并返回一个n阶数字方阵。要求将n2个自然数按螺旋纹路填入这个n阶方阵(顺时针,由外向内)。本程序设计中,系统提示输入一个3-9的数字,根据输入的数字显示方阵,如输入4,输出:12341213145111615610987 要实现该功能要求,需要显示提示字符串,接受用户输入,调用中断2,按要求显示方阵。2 程序设计2.1题目基本

4、内容具体要求: (1)输出提示输入,接受在一定范围内的指定数字(本程序为3到9之间),否则重新输入,如果是ESC键,则推出程序(2)对接受的数字进行运算,将n2个自然数按螺旋纹路填入n阶方阵并显示该方阵。2.2系统流程框图 主程序流程图设置BIOS中断 设置文本显示方式输出显示提示接受输入n 保存al中ESC键?调用EIXT子程序退出程序介于3到9 ?Teletype 模式求得n*n 保存到si中NEXT 调用SHOW子程序,完成一次循环显示BP < SI ?显示完成YNNYNY开始 子程序工作流程SHOW循环显示子程序: CRT子程序调整AL值取得BP中的值向右输出n数每输出一个自加向

5、下输出n-1个数每输出一个自加向左输出n-1个数每输出一个自加向右输出n-2每输出一个自加子程序返回 分别得到二位十进制个位、十位的值N十位是否为0 Y此位输出空格输出其值输出个位值子程序返回 2.3程序设计分析算法实现并不是件简单的事情。高级语言可以设置二维数组实现,不必考虑其位数,输出也仅是一个元素值。而用汇编则遇到定位鼠标,才是显示,根据程序要求,想要达到程序要求,必须对鼠标位置做精确定位3。汇编一次只能输出一个字符,对于二位十进制数据时,必须作出处理分别输出5。如果对于一位二进制数不做处理,输出时的样子非常难看。处理方案是:当输出一位十进制数时,在十位位置填充空格,显示效果良好1。根据

6、课题的要求,主要完成一下几方面的设计:1显示提示输入,提示输入 ,并保证输入大于3小于9,否则重新输入2编写子程序,用算法实现每次形如矩形的输出,直至输出完毕3在输出时,如果是两位十进制数,使用设计子程序分别输出个位,十位值,若是一位十进制数,十位填充空格,输出。3 主要代码实现3.1 主模块代码 主模块主要完成的功能有:在屏幕显示提示字符串、准备接收用户输入的字符,若为Esc键,则推出程序;若为数字字符,则将其转换成数字,并判断数字是否在规定范围内,然后根据数字大小调用相应子模块,显示方阵。该模块主要使用了进栈、出栈,基本加减运算,赋值运算,比较运算以及流程跳转控制。 PUSH CS POP

7、 DS MOV AX,3 INT 10H ;BIOS中断,置文本显示模式 MOV AX,0B800H MOV ES,AX ;定位显存 MOV DX,OFFSET MSG MOV AH,9 INT 21H ;提示 T0: MOV AH,0 INT 16H ;接收数据 CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh) JZ QUIT CMP AL,'3' ;数据校验,保证输入3<al<9 JB T0 CMP AL,'9' JA T0 MOV AH,0EH ;在Teletype模式下显示字符 INT 10H ;显示有效数 SUB AL

8、,30H ;得到十进制数字 PUSH AX MUL AL ;al*al MOV SI,AX ;保存矩阵最大数到si中 POP AX CBW ;chang byte to word MOV BP,1 ;第一个元素值 MOV DI,3*80*2 NEXT: MOV CNT1,AX ;输入数据保存到cnt1 DEC AX ;n-1 MOV CNT2,AX MOV CNT3,AX DEC AX ;(n-1)-1 MOV CNT4,AX ADD DI,3*2 CALL SHOW ;输出矩阵 MOV AX,CNT1 SUB AX,2 SUB DI,3*2 CMP BP,SI JBE NEXT ;bp<

9、;si,则继续执行 MOV AH,0 INT 16H ;等待 JNZ START QUIT: MOV AX,4C00H INT 21H3.2 显示方阵模块代码 显示方阵模块主要用于控制数字及其显示位置4,以达到题目要求的数字按照螺旋纹路填入n阶方阵中。该模块主要运用了赋值运算,循环控制,比较运算及流程控制。SHOW: ;显示方阵 MOV CX,CNT1 ;right 向右赋值 M1: CALL CRT INC BP ;下一个元素数值 LOOP M1 MOV CX,CNT2 ;down 向下赋值 JCXZ P2 ;cx=0,则转p2处 M2: ADD DI,(80-3)*2 CALL CRT I

10、NC BP LOOP M2 MOV CX,CNT3 ;left 向左赋值 JCXZ P2 M3: SUB DI,6*2 ;下一个元素位置 CALL CRT INC BP LOOP M3 MOV CX,CNT4 ;up 向上赋值 JCXZ P2 M4: SUB DI,(80+3)*2 CALL CRT INC BP LOOP M4 P2: RET3.3 显示控制模块代码 控制模块主要用于控制数字的显示方式,若为一位数,则显示个位,并补充空格;若为两位数,则分别显示十位和个位,以达到数字的正确显示。主要进行了数字的修正和各位数字的分离。 CRT: MOV AX,BP AAM ;调整指令 OR AX

11、,3030H XCHG AH,AL ;交换ah和al CMP AL,'0' JNZ P1 MOV AL,20H P1: STOSB ;显示十位 INC DI MOV AL,AH STOSB ;显示个位 INC DI MOV AL,20H STOSB ;显示空格 INC DI RET4 运行结果分析经过上诉分析和模块设计,编写出完整的程序代码。经过不断的调试和修改得到最终程序设计。该程序能正常运行,并完成规定的功能。现将运行结果截图如下:程序开始运行: 图4.1输入3,运行结果如下: 图4.2键入9,运行结果如下: 图4.35 课程设计总结课程设计是将课本上所学的理论知识运用与解

12、决实际的问题,对松散的理论知识的一个集合式运用,也是综合知识,综合运用能力的一个过程。对知识的掌握和灵活运用是一个很好的考察。由于汇编是大二时所学,那么长时间没有运用,忘了好大一部分。当要做课程设计时,又把整本书又复习了一遍,而且我们那本课本是入门级教材。对诸如DOS和BIOS中断的介绍也只是一个简单的叙述,当真正要使用某一功能时,我们的课本就捉襟见肘了。因此在课程设计的过程中,图书馆和丰富的网络资源得到了充分的应用。 本次课程设计,一方面让我们再次熟悉汇编指令,再次对算法的设计有一定的理解和掌握。另一方面让我们对较大汇编程序的编写有一个清晰的过程,学习把一个较大问题分解成若干个小问题,即子程

13、序编写。养成一个良好的编程习惯。通过本次课程设计让大家掌握常用的基本汇编指令,提高了将学习的理论知识应用于解决实际问题的能力。通过一周的课程设计使我对汇编语言有了更深的理解,对以前学习中不明白的,不理解的都有了进一步的理解。在实际操作中遇到了很多困难,但通过找资料,请教同学和老师,使我的动手能力和沟通能力都有了提高。在整个课程设计中总是在编写程序中发生错误,有时会很没耐性,但都被我一一克服了。通过本次课程设计,我更加理解了书本上的理论知识,也进一步培养了将理论运用于实践,以解决实际问题的能力。这样的经验也告诉我,学习更重要的是动手能力,只要通过动手实践才能更好的掌握所学知识,才能学以致用,更好

14、发挥知识的优越性,体现学习的价值。在做完这个课程设计时,心里有种说不出来的高兴,自己动手完成的设计有一种成就感,增强了自己的自信心,我相信在今后的学习中,我会保持这种良好的心情投入到各科的学习中,不断提升自己的学习能力。参考文献1 钱晓捷新版汇编语言程序设计北京:电子工业出版社,2008 2 杨季文 8086汇编语言程序设计教程北京:清华大学出版社, 20043 李珍香等汇编语言课程设计案例精编北京:中国水利水电出版社,20054 洪志全 罗省贤 汇编语言程序设计教程北京:电子工业出版社,20045 楼顺天 周佳社. 微机原理与接口技术.北京:科学出版社,2006

15、附录源程序代码 CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H START: PUSH CS POP DS MOV AX,3 INT 10H ;BIOS中断,置文本显示模式 MOV AX,0B800H MOV ES,AX ;定位显存 MOV DX,OFFSET MSG MOV AH,9 INT 21H ;提示 T0: MOV AH,0 INT 16H ;接收数据 CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh) JZ QUIT CMP AL,'3' ;数据校验,保证输入3<al<9 JB T0 CMP

16、AL,'9' JA T0 MOV AH,0EH ;在Teletype模式下显示字符 INT 10H ;显示有效数 SUB AL,30H ;得到十进制数字 PUSH AX MUL AL ;al*al MOV SI,AX ;保存矩阵最大数到si中 POP AX CBW ;chang byte to word MOV BP,1 ;第一个元素值 MOV DI,3*80*2 NEXT: MOV CNT1,AX ;输入数据保存到cnt1 DEC AX ;n-1 MOV CNT2,AX MOV CNT3,AX DEC AX ;(n-1)-1 MOV CNT4,AX ADD DI,3*2 CA

17、LL SHOW ;输出矩阵 MOV AX,CNT1 SUB AX,2 SUB DI,3*2 CMP BP,SI JBE NEXT ;bp<si,则继续执行 MOV AH,0 INT 16H ;等待 JNZ START QUIT: MOV AX,4C00H INT 21H SHOW: ;显示方阵 MOV CX,CNT1 ;right 向右赋值 M1: CALL CRT INC BP ;下一个元素数值 LOOP M1 MOV CX,CNT2 ;down 向下赋值 JCXZ P2 ;cx=0,则转p2处 M2: ADD DI,(80-3)*2 CALL CRT INC BP LOOP M2 MOV CX,CNT3 ;left 向左赋值 JCXZ P2 M3: SUB DI,6*2 ;下一个元素位置 CALL CRT INC BP LOOP M3 MOV CX,CNT4 ;up 向上赋值 JCXZ P2 M4: SUB DI,(80+3)*2 CALL CRT INC BP LOOP M4 P2: RET CRT:

温馨提示

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

评论

0/150

提交评论