《汇编语言课程设计-数字方阵(共16页).doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计-数字方阵(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上摘 要 汇编语言编程不仅具有计算机提供给用户的最快而又最有效的语言的优势,也可以在不很了解计算机硬件的前提下使用它。在对于程序的空间和时间要求很高的场合,使用汇编语言是必不可少,甚至对于很多需要直接控制硬件的应用场合,用保护模式下的汇编语言编程也提供给了对硬件不了解的初学者一种方法。本次课程设计,是使用汇编作为开发语言完成数字方阵程序设计,即用户输入数字n,程序输出n阶方阵。本文主要分为问题描述、程序设计、代码实现、运行结果分析和课程设计总结几个部分。完整的表述了程序设计的全部过程及所涉及的基本思路和功能模块的代码实现。在代码编写中,还附加有文字说明,增加程序可读性。
2、各个部分紧密联系,相互贯通,保证最终程序设计得以完整并正确的实现。其中,问题描述阐述所要解决的问题、实现的功能;程序设计绘制程序流程图,作为程序编写的依据;代码实现主要列出本程序设计中涉及的主要模块的代码;运行结果分析为程序初步完成基础上的程序调试和功能测试,确保程序设计正确,能实现所要求的功能;通过课程设计总结对本次课程设计得失进行总结。总结遇到的问题、解决途径以及学到的知识,新掌握的编程技巧等。最后,附上源程序清单及参考文献。关键词:汇编语言,数字方阵,编程技巧,课程设计专心-专注-专业目录1 问题描述本程序设计主要要求用汇编语言实现数字方阵的创建。程序提示用户输入任一数字n,系统接收该数
3、字,并返回一个n阶数字方阵。要求将n2个自然数按螺旋纹路填入这个n阶方阵(顺时针,由外向内)。本程序设计中,系统提示输入一个3-9的数字,根据输入的数字显示方阵,如输入4,输出:12341213145111615610987 要实现该功能要求,需要显示提示字符串,接受用户输入,调用中断2,按要求显示方阵。2 程序设计2.1题目基本内容具体要求: (1)输出提示输入,接受在一定范围内的指定数字(本程序为3到9之间),否则重新输入,如果是ESC键,则推出程序(2)对接受的数字进行运算,将n2个自然数按螺旋纹路填入n阶方阵并显示该方阵。2.2系统流程框图2.2.1 主程序流程图设置BIOS中断 设置
4、文本显示方式输出显示提示接受输入n 保存al中ESC键?调用EIXT子程序退出程序介于3到9 ?Teletype 模式求得n*n 保存到si中NEXT 调用SHOW子程序,完成一次循环显示BP SI ?显示完成YNNYNY开始2.2.2 子程序工作流程SHOW循环显示子程序: CRT子程序调整AL值取得BP中的值向右输出n数每输出一个自加向下输出n-1个数每输出一个自加向左输出n-1个数每输出一个自加向右输出n-2每输出一个自加子程序返回 分别得到二位十进制个位、十位的值N十位是否为0 Y此位输出空格输出其值输出个位值子程序返回 2.3程序设计分析算法实现并不是件简单的事情。高级语言可以设置二
5、维数组实现,不必考虑其位数,输出也仅是一个元素值。而用汇编则遇到定位鼠标,才是显示,根据程序要求,想要达到程序要求,必须对鼠标位置做精确定位3。汇编一次只能输出一个字符,对于二位十进制数据时,必须作出处理分别输出5。如果对于一位二进制数不做处理,输出时的样子非常难看。处理方案是:当输出一位十进制数时,在十位位置填充空格,显示效果良好1。根据课题的要求,主要完成一下几方面的设计:1显示提示输入,提示输入 ,并保证输入大于3小于9,否则重新输入2编写子程序,用算法实现每次形如矩形的输出,直至输出完毕3在输出时,如果是两位十进制数,使用设计子程序分别输出个位,十位值,若是一位十进制数,十位填充空格,
6、输出。3 主要代码实现3.1 主模块代码 主模块主要完成的功能有:在屏幕显示提示字符串、准备接收用户输入的字符,若为Esc键,则推出程序;若为数字字符,则将其转换成数字,并判断数字是否在规定范围内,然后根据数字大小调用相应子模块,显示方阵。该模块主要使用了进栈、出栈,基本加减运算,赋值运算,比较运算以及流程跳转控制。 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 ;接
7、收数据 CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh) JZ QUIT CMP AL,3 ;数据校验,保证输入3al9 JB T0 CMP 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 A
8、X ;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 ;bpsi,则继续执行 MOV AH,0 INT 16H ;等待 JNZ START QUIT: MOV AX,4C00H INT 21H3.2 显示方阵模块代码 显示方阵模块主要用于控制数字及其显示位置4,以达到题目要求的数字按照螺旋纹路填入n阶方阵中。该模块主要运用了赋值运算,循环控制,比较运算及流程控制。SHOW: ;
9、显示方阵 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 LOO
10、P M4 P2: RET3.3 显示控制模块代码 控制模块主要用于控制数字的显示方式,若为一位数,则显示个位,并补充空格;若为两位数,则分别显示十位和个位,以达到数字的正确显示。主要进行了数字的修正和各位数字的分离。 CRT: MOV AX,BP AAM ;调整指令 OR AX,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 运行结果分析经过上诉分析和模块设计,编写
11、出完整的程序代码。经过不断的调试和修改得到最终程序设计。该程序能正常运行,并完成规定的功能。现将运行结果截图如下:程序开始运行: 图4.1输入3,运行结果如下: 图4.2键入9,运行结果如下: 图4.35 课程设计总结课程设计是将课本上所学的理论知识运用与解决实际的问题,对松散的理论知识的一个集合式运用,也是综合知识,综合运用能力的一个过程。对知识的掌握和灵活运用是一个很好的考察。由于汇编是大二时所学,那么长时间没有运用,忘了好大一部分。当要做课程设计时,又把整本书又复习了一遍,而且我们那本课本是入门级教材。对诸如DOS和BIOS中断的介绍也只是一个简单的叙述,当真正要使用某一功能时,我们的课
12、本就捉襟见肘了。因此在课程设计的过程中,图书馆和丰富的网络资源得到了充分的应用。 本次课程设计,一方面让我们再次熟悉汇编指令,再次对算法的设计有一定的理解和掌握。另一方面让我们对较大汇编程序的编写有一个清晰的过程,学习把一个较大问题分解成若干个小问题,即子程序编写。养成一个良好的编程习惯。通过本次课程设计让大家掌握常用的基本汇编指令,提高了将学习的理论知识应用于解决实际问题的能力。通过一周的课程设计使我对汇编语言有了更深的理解,对以前学习中不明白的,不理解的都有了进一步的理解。在实际操作中遇到了很多困难,但通过找资料,请教同学和老师,使我的动手能力和沟通能力都有了提高。在整个课程设计中总是在编
13、写程序中发生错误,有时会很没耐性,但都被我一一克服了。通过本次课程设计,我更加理解了书本上的理论知识,也进一步培养了将理论运用于实践,以解决实际问题的能力。这样的经验也告诉我,学习更重要的是动手能力,只要通过动手实践才能更好的掌握所学知识,才能学以致用,更好发挥知识的优越性,体现学习的价值。在做完这个课程设计时,心里有种说不出来的高兴,自己动手完成的设计有一种成就感,增强了自己的自信心,我相信在今后的学习中,我会保持这种良好的心情投入到各科的学习中,不断提升自己的学习能力。参考文献1 钱晓捷新版汇编语言程序设计北京:电子工业出版社,2008 2 杨季文8086汇编语言程序设计教程北京:清华大学
14、出版社, 20043 李珍香等汇编语言课程设计案例精编北京:中国水利水电出版社,20054 洪志全罗省贤汇编语言程序设计教程北京:电子工业出版社,20045 楼顺天 周佳社. 微机原理与接口技术.北京:科学出版社,2006附录源程序代码 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
15、 INT 16H ;接收数据 CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh) JZ QUIT CMP AL,3 ;数据校验,保证输入3al9 JB T0 CMP 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 ;输入数据保存
16、到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 ;bpsi,则继续执行 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,CN
17、T2 ;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: MOV AX,BP AAM ;调整指令 OR AX,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 RET MSG DB input(3-9),Esc to quit: $ CNT1 DW ? CNT2 DW ? CNT3 DW ? CNT4 DW ? CODE ENDS END START