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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(汇编语言课程论文.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

汇编语言课程论文.docx

1、汇编语言课程论文 汇编语言程序设计摘要 汇编语言是面向机器的程序设计语言。在汇编语合中,用助记符代替操作码,用地址符号或标号代替地址码。这样用指令的助记符、符号地址、标号、伪指令等符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器上能执行的机器语言的过程称为汇编。关键词:汇编语言、程序设计、指令系统第1章 汇编语言概况汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能

2、直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。 大多数情况下Linux程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux操作系统中也可以用完

3、全用C语言来实现,再加上GCC这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。第2章 汇编语言的基本元素2.1 汇编语言的语句格式 由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由14个部分组成,其格式是: 标识符 指令助记符 操作数;注解其中用方括号括起来的部分可有可

4、无。每部分之间用空格(至少一个)分开,一行最多可有132个字符。2.2 汇编语言的运算符1算术运算符、逻辑运算符和关系运算符 算术运算符可以应用于数字操作数,结果也是数字。而应用于存储器操作数时,只有、 运算符有意义。2取值运算符SEG、OFFSET、TYPE、SIZE和LENGTH SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。 TYPE操作符返回一个表示存储器操作数类型的数值。各种存储器地址操作数类型部分的值如表3-1所示。表3-1 存储器操作数的类型属性及返回值字节1字2双字4NEAR1FAR2 LENGTH和SIZE操作符只应用于数据存储器操作数。(用DB/DW/DD且用

5、DUP等定义的操作数) LENGTH返回一个与存储器地址操作数相联系的基本数据个数, SIZE操作数返回一个为存储器操作数分配的字节数(即单元数)。3属性运算符 属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。常用的有:(1) 合成运算符PTR它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性,一般格式:类型 PTR 表达式功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。例如:SLOT DW 25 此时SLOT已定义成字单元。若我们想取出它的第一个字节内容,则可用PT

6、R对其作用,使它暂时改变为字节单元。2.3表达式 是由运算符和操作数组成的序列,在汇编时产生一个确定的值。这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。1常数 汇编语言语句中出现的常数可以有7种: 二进制数 后跟字母B,如01000001B。 八进制数 后跟字母Q或O,如202Q或202O。 十进制数 后跟D或不跟字母,如85D或85。 十六进制数 后跟H,如56H,0FFH。注意,当数字的第一个字符是AF时,在字符前应添加一个数字0,以示和变量的区别。 另有,十进制浮点数、十六进制实数、字符和字符串2常量操作数 常量操作数是一个数值操作数

7、,一般是常量或者是表示常量的标识符。可以为数字常量操作数或字符串常量操作数。前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。3存储器操作数 存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。 存储器操作数可以分为变量及标号两者类型,如果存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么这个存储器操作数就称为变量;如果存储器操作数所代表的是某条指令代码在码段中的地址,那么这个存储器操作数称为标号。变量所对应的存储单元内容在程序的运行过程中是可以改变的,标号通常作为转移指令或调用指令的目标操作数,在程序运行过程中

8、不能改变。 存储器操作数有三个方面的属性。 (1) 段地址:即存储器操作数所对应的存储单元所在段的段地址; (2) 偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址;(3) 类型:变量的类型是相应存储单元所存放的数据项的字节数;而标号的类型则反映了相应存储单元地址在作为转移或调用指令的目标操作数时的寻址方式,可有两种情况,即 NEAR和FAR。4常量表达式 由常量操作数及运算符构成,在汇编时产生一个常量。如PORT、VAL十1、 OFFSET SUM、SEG SUM、TYPE CYCLE等。5地址表达式 由存储器操作数与运算符构成,必须有明确的物理意义。例如 SUM2、CYCLE5

9、表达式SUM2、CYCLE5的值仍然是一个存储器操作数,该存储器操作数的段地址与类型属性分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。2.4 汇编语言程序汇编步骤1编写源程序 在弄规定,逐个模块地编写汇编语言源程序。通常使用编辑软件(例如:EDLIN、EDIT或其他软件),将源程序输入到计算机中。汇编语言源程序的扩展名为.ASM 。 2汇编 利用汇编程序(或宏汇编程序)(ASM或MASM)对汇编语言源程序进行汇编,产生扩展名为.OBJ的可重定位的目的代码。 同时,如果需要,宏汇编还可以

10、产生扩展名为.LST的列表文件和扩展名为.CRF的交叉参考文件。前者列出汇编产生的目的代码及与之有关的地址、源语句和符号表;后者再经CREF文件处理可得各定义符号与源程序行号的对应清单。 在对源程序进行汇编过程中,汇编程序会对源程序中的非逻辑性错误给出显示,例如,源程序中使用了非法指令、标号重复、相对转移超出转移范围等等。利用这些提示,设计者需修改源程序,以消除这些语法上的错误。 程序设计者在改正源程序中的错误过程中,重新编辑源程序,形成新的.ASM文件。然后重新汇编,直到汇编程序显示无错误为止。 3连接 利用连接程序(LINK)可将一个或多个.OBJ文件进行连接,生成扩展名为.EXE的可执行

11、文件。在连接过程中,LINK同样会给出错误提示。设计者应根据错误提示,分析发生错误的原因,并修改源程序,然后重复前面的过程汇编、连接,最后得到.EXE可执行文件。 4调试 对于稍大一些的程序来说,经过上述步骤所获得的.EXE文件,在运行过程中难免无错。也就是说,前面只能发现一些明显的语法上的错误。而对程序的逻辑错、能否达到预期的功能均无法得知。因此,必须对可执行文件(.EXE文件)进行调试。通过调试来证明程序确实能达到预期的功能且没有漏洞。 程序调试通过则可进入试运行。在试运行过程中不断进行观察、测试,发现问题及时解决,最后完成软件设计。第3章 伪指令 伪指令用来对汇编程序进行控制,对程序中的

12、数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。3.1 定义数据伪指令 该类伪指令用来定义存储空间及其所存数据的长度。 DB:定义字节,即每个数据是1个字节。 DW:定义字,即每个数据占1个字(2个字节)。 DD:定义双字,即每个数据占2个字。低字在低地址,高字在高地址。 DQ:定义4字长,即每个数据占4个字。 DT:定义10个字节长,用于压缩式十进制数。3.2 符号定义伪指令EQU、=、及PURGE EQU 伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替。3.3段定义伪指令SEGMENT和E

13、NDS 一般来说,一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。段定义伪指令一般格式为 : 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS SEGMENT和END5应成对使用,缺不可。其中段名是不可省略的。其它是可选项,是赋予段名的属性,可以省略。3.4 设定段寄存器伪指令ASSUME 一般格式: ASSUME 段寄存器:段名,段寄存器:段名,功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。3.5定义过程的伪指令PROC和ENDP 在

14、程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。要求先定义后使用。一个过程由伪指令PROC和ENDP来定义,其格式为: 过程名 PROC 类型 过程体 RET 过程名 ENDP其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。过程体内至少应有一条RET指令,以便返回被调用处。过程可以嵌套,也可以递归使用。3.6 宏指令 在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化程序书写,该程序段可以用一条宏指令来代替,

15、而汇编程序汇编到该宏指令时,仍会产生源程序所需的代码。3.7 ORG 伪指令ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。 一般格式: ORG 3.8 汇编结束伪指令END 该伪指令表示源程序的结束令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令。一般格式: END 表达式其中表达式表示该汇编程序的启动地址。例如:END START ;表明该程序的启动地址为START。第4章 汇编程序设计4.1 简单程序设计 简单程序设计是没有分支,没有循环的直线运行程序,程序执行按照IP内容自动增加的顺序进行。4.2分支程序设计 分支程序的基本思想是根据逻辑判断的结果来形成程

16、序的分支,如图,若A成立,则执行P1;否则执行P2。 4.3循环程序设计 循环程序是经常遇到的程序结构,一个循环结构通常由以下几个部分组成。 图3-4 循环结构示意图1.循环初始化部分。一般要进行地址指针、循环次数及某标志的设置,相关寄存器的清零等操作。只有正确地进行了初始化设置, 循环程序才能正确运行,及时停止。2循环体。是要求重复执行的程序段部分,对应于要求重复执行的操作。 3循环控制部分。由该部分修改并判断控制循环的条件是否满足。以决定是否继续循环。 4循环结束部分。如保存循环运行结果等。 循环程序有两种结构形式,一种是DOWHILE结构,另一种是DOUNTIL结构。前者把循环控制部分放

17、在循环体的前面,先判断执行循环体的条件,满足条件就执行循环体,否则就退出循环,如图3-4(2)所示。而后者则是在执行循环体之后,再判断循环控制条件是否满足,若满足条件,则继续执行循环操作,否则,则退出循环。如图3-4(1)所示。DOWHILE结构的循环程序,其循环体有可能并不执行,而DOUNTIL循环程序的循环体至少必须执行一次。4.4 子程序设计 子程序是程序设计中经常使用的程序结构,通过把一些固定的、经常使用的功能做成子程序的形式,可以使源程序及目标程序大大缩短,提高程序设计的效率和可靠性。对于一个子程序,应该注意它的入口参数和出口参数。入口参数是由主程序传给子程序的参数,而出口参数是子程

18、序运算完传给主程序的结果。另外,子程序所使用的寄存器和存储单元往往需要保护,以免影响返回后主程序的运行。主程序在调用子程序时,一方面初始数据要传给子程序,另一方面子程序运行结果要传给主程序,因此,主子程序之间的参数传递是非常重要的。第5章 汇编语言的优点与缺点1.优点汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:(1)能够直接访问与硬件相关的存储器或I/O端口; (2)能够不受编译器的限制,对生成的二进制代码进行完全的控制; (3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁; (4)能够根据特定的应用对代码做最佳的优化,提高运行速度; (

19、5)能够最大限度地发挥硬件的功能。2.缺点 同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点: (1)编写的代码非常难懂,不好维护; (2)很容易产生bug,难于调试; (3)只能针对特定的体系结构和处理器进行优化; (4)开发效率很低,时间长且单调。第6章 汇编语言的特点汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。汇编语言的特点: 1.面向机器的低级语言,通常是为特定

20、的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。 3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 5.经常与高级语言配合使用,应用十分广泛。 对于不同型号的计算机,有着不同的结构的汇编语言,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。 汇

21、编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。 汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的汇编程序中进行加工和翻译,才能变成能够被计算机直接识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,当它被安置在内存的预定位置上,就能被计算机的CPU处理和执行。 汇编语言像机器指令一样,

22、是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。第7章 汇编语言的应用汇编语言作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿Linux内核来讲,虽然绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在Linux的启动部分。由于这部分代码与硬件的关系非常密切,即使是C语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬

23、件的性能。1.70%以上的系统软件是用汇编语言编写的。 2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言是理解整个计算机系统的最佳起点和最有效途径,人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于

24、下。汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点。总结刚刚接触汇编的时候甚至分不清寄存器和存储器,也不明白什么是操作数,前几章学习指令的时候简直是云里雾里,为指令改错更是生搬硬套,看见两个中括号就说它错了,7种寻址方式求有效地址,给什么就加什么,也不知道为什么,知道前几天才突然发现那些跳转指令其实都是英文缩写,以前每次用到跳转的时候都要查表,什么都不记得

25、,现在知道CLC就是clear CF,STC就是set CF,以此类推就什么都记住了,还有MOV AX,OFFSET ARRBXSI为什么是错的,而 LEA AX,ARRBXSI就是对的,因为OFFSET是一个伪操作符,而LEA是计算机指令,不需要在汇编时计算,在汇编的时候,汇编程序知道ARR的地址是多少,但不能知道BX和SI的值是多少,所以不能得到ARRBXSI的地址。这些都是在复习的时候和同学讨论研究出来的,可见一个人的学习效率往往不如几个同学一起讨论,学习的过程中更需要有人提点。参考文献微型计算机原理及应用(第二版) 候晓霞编著 化学工业出版社致谢词温老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本论文从选题到完成,每一步都是在老师的指导下完成的,倾注了导师大量的心血。在此,谨向温老师表示崇高的敬意和衷心的感谢!感谢温老师平时对我的教育培养,他细心指导我的学习与研究,在此,我要向温老师深深地鞠上一躬。感谢我的同学这半年来对我学习、生活的关心和帮助。最后,向我的父亲、母亲、致谢,感谢他们对我的理解与支持。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2