您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 汇编语言程序课程设计
汇编课程设计与学习总结系别专业届别班级学生姓名学号指导教师职称二O一六年六月课程设计任务安排:Poweridea公司从1975年成立一直到1995年的基本情况如下表所示,该数据已在程序中定义好(见图1-1):年份收入(千美元)雇员(人)人均收入(千美元)1975163?1976227?19773829?1978135613?1979239028?1980800038?…………1995593700017800?datasegmentdb'1975','1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995';以上是21年的21个字符串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个dowrd型数据dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw11542,14430,15257,17800;以上是表示21年公司雇员人数的21个word型数据dataends表1-1:公司基本情况图1-1:程序中数据定义计算data数据段中每一年的人均收入,并将所有数据按照如图1-2所示的格式在屏幕上显示出来。图1-2:效果图第一部分:程序设计思路以及程序流程图(这部分首先描述设计框架,然后画出流程图)程序主要从以下几个方面来进行设计1、人均收入的计算人均收入等于收入除以雇员人数。设计中要注意的是要相对应的收入除以相对应的雇员人数。所以在设计中用了直接寻址和间接寻址的方式来控制。si来定位显示缓冲区的数值放置位置和年份字符串的字符,bx定位收入字符串中的字符,di定位雇员字符串中的字符。2、在屏幕中显示结果向段地址为b800的地址空间写入数据,写入的内容将出现在显示器上。一个字符在显示缓冲区要占两个字节,低位字节存储字符的ASCII码,高位字节存储字符的属性。本设计中将年份、收入、雇员以及计算出的人均收入的数值转化为十进制的字符串,每个字符的ASCII码放入显示缓存区的低位;高位存放颜色属性,本次设计为黑底白字,故设置为00000111B,即07h。本程序共用了几个子程序,子程序之间相互调用,尽可能地将程序优化。:1、s:主要作用是在指定位置将年份、收入、雇员以及计算出的人均收入的数值放入显示缓冲区中,以指定的颜色进行显示。在过程中调用其他子程序,循环21次,将每个数据都放入缓存区中。2、changeToStr:主要是将字型数据转换成十进制形式的字符串,以便屏幕中显示的是我们能够读懂的信息。转换方法是用数据除以10,循环多次,每次得到的余数都加上30H,便得到表示十进制的ASCII码串。3、s1:判断数据的每一位都转化成十进制的ASCII码,只要除到商为0,就能确定每一位都转化了。所以在程序中循环多次,用jnz指令实现相关功能,直至数据各位的值都求出。4、s2:将得到的十进制ASCII码串一位位地放入缓冲区中,用jnz指令判断,直至数值都放入显示缓冲区后,返回上一级程序。5、divdw:进行不会溢出的除法运算。在对字型数据的转换过程中,实现对10的不断取余。同时在计算人均收入时,完成收入除以雇员人数的计算。bx加上84,收入开始将基本数据放入寄存器dx,将es的段地址赋值为0b800h,即为显示缓冲区将年份放入es中,颜色设置为黑底白字定位到收入字段将收入的值转化为十进制的ASCII码,放入es中,颜色设置为黑底白字定位到雇佣人数字段将雇员人数的值转化为十进制的ASCII码,放入es中,颜色设置为黑底白字收入除以雇员人数,得到人均收入将人均收入的值转化为十进制的ASCII码,放入es中,颜色设置为黑底白字是否循环了21次?结束定位到年份字段,显示缓冲区换至下一行。NY第二部分:程序代码(写出完整程序代码)(格式要求:ArialNarrow,五号)assumecs:codesg,ds:datasg,ss:stacksgdatasgSEGMENTdb'1975','1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995';以上是21年的21个字符串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个dowrd型数据dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw11542,14430,15257,17800;以上是表示21年公司雇员人数的21个word型数据datasgENDSstacksgSEGMENTdw16dup(0)stacksgENDScodesgSEGMENTstart:movax,datasgmovds,axmovax,0b800hmoves,ax;es的段地址设置为b800h,作为显示缓冲区movax,stacksgmovss,axmovsp,32movcx,21movsi,0movbx,0movdi,0s:moval,[bx];将年份的数据放入es中moves:[si],almovbyteptres:[si+1],07h;07为黑底白字moval,[bx+1]moves:[si+2],almovbyteptres:[si+3],07hmoval,[bx+2]moves:[si+4],almovbyteptres:[si+5],07hmoval,[bx+3]moves:[si+6],almovbyteptres:[si+7],07hmovax,[bx+84];定位到收入字段movdx,[bx+86]addsi,20callchangeToStr;调用changeToStr,将数据转化为字型数据转换成十进制形式的字符串,并放入es中movax,[di+168];定位到雇员字段movdx,0addsi,20callchangeToStrmovdx,[bx+86]movax,[bx+84]pushcxmovcx,[di+168]addsi,20calldivdw;得到人均收入pushaxmovax,dxcallchangeToStrpopaxcallchangeToStrsubsi,60popcxaddbx,4adddi,2addsi,160loopschangeToStr:pushsipushcxmovbp,sps0:movcx,10calldivdwaddcl,'0'movch,07hpushcxcmpax,0;执行ax-0,不保存结果,只影响标志位;如果ax不为0,jnz条件成立jnzs0s1:popaxmoves:[si],axaddsi,2cmpsp,bp;执行sp-bp,如果结果不为0,jnz条件成立jnzs1popcxpopsiretdivdw:pushbppushaxmovax,dxmovdx,0divcxmovbp,axpopaxdivcxmovcx,dxmovdx,bppopbpretmovax,4c00hint21hcodesgENDSENDstart汇编程序语言学习总结(这部分要求:根据这学期学习的课程以及大学期间学习的几种编程语言、单片机以及ARM,通过分析比较对汇编语言进行总结,描述清楚该语言的作用,特点,与其他语言的区别以及将来的主要作用范围。内容可以结合文字,图表,不少于两页。)(格式要求:宋体,小四,行间距为20磅。图表的标题为宋体五号)在上学期我们专业开设了单片机课程,在学习单片机的过程中,我们就接触到了汇编语言,但那时候没有系统的学习,只知道像mov、jump、inc这样一些常用的简单指令。而在最后单片机的课程设计中,我们采用的是c语言来编程。那时候认为汇编语言并没有什么大的作用,汇编语言能做的,c语言也都能做,而且更为简单。但真正接触这门课后,才发现汇编语言有它自己独特的作用,而且也不是很容易就可以弄懂的。相比较其他高级语言如C++、java等,电脑等于在迁就人的思维方式。但学汇编,人却必须要去迁就电脑的思维方式。要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。通过这一学期的学习,我对汇编只是有了初步的掌握。现在我来通过比较汇编语言和几种高级语言的区别来对汇编语言作一个小小的总结。在我们学过的高级语言,Java和C++都是面向对象语言,它们都能够实现面向对象思想(封装、继承、多态)。C++是在C语言基础上进行扩展而来的一门面向对象的程序设计语言。相比其他语言,它具有很多优点和特点的,它对面向对象的支持,让我们可以将一个功能模块封装成一个类,对于使用这个功能模块的人,只需调用这个类的方法就可以了,不必关心功能如何实现的,这一点可以在开发大型项目的时候提高开发效率,减少开发周期。同时,可以通过对类进行派生来扩展模块的功能,而不影响原有的功能。C++的异常处理机制可以很好地对代码的异常进行捕捉,保证了在程序运行时出现错误不至于整个崩溃掉,也为我们对于运行时错误的处理提供了一种有效的途径。C++程序的依赖性小,对C++代码进行静态连接,就能保证生成的可执行程序在别的电脑上直接运行。Java语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似c++中的对象和方法,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。Java语言与C++类似,如果用户了解C++和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C++语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性。Java语言虽然简单,但很高效,它可以用面向对象的方法来描述用户的每一个动作。Java同样支持类继承,这样也减少了程序设计的复杂性。Java程序可以在任何平台上运行,如MS-DOS,Windows,Unix等,因此具有很强的移植性。由于它支持TCP/IP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。而汇编语言是面向机器的程序设计语言。在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。所以汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。汇编语言针对不同的操作系统平台,不同的微控制器,指令都是完全不同的,即使指令相似,也不具有可移植性。但是汇编语言是针对专门的控制器的,所以运行速度可以精确到一个指令周期。汇编语言的程序读懂需要借助微控制器的指令手册以及各个寄存器的说明,所以很难读懂。汇编语言编写代码实时性强,能够直接控制硬件的工作状态,但是不具有可移植性,维护和修改困难。汇编语言有这样几个特点:1.机器相关性这是一种面向机器的低级语言,通常是为特定的计算机或系列
本文标题:汇编语言程序课程设计
链接地址:https://www.777doc.com/doc-2279448 .html