汇编语言课程论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计
摘要
汇编语言是面向机器的程序设计语言。在汇编语合中,用助记符代替操作码,用地址符号或标号代替地址码。这样用指令的助记符、符号地址、标号、伪指令等符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器上能执行的机器语言的过程称为汇编。
[关键词]:汇编语言、程序设计、指令系统
目录
第1章汇编语言概况 (1)
第2章汇编语言的基本元素 (1)
2.1 汇编语言的语句格式 (1)
2.2 汇编语言的运算符 (1)
2.3表达式 (2)
2.4 汇编语言程序汇编步骤 (4)
第3章伪指令 (5)
3.1 定义数据伪指令 (5)
3.2 符号定义伪指令EQU、=、及PURGE (5)
3.3段定义伪指令SEGMENT和ENDS (5)
3.4 设定段寄存器伪指令ASSUME (6)
3.5定义过程的伪指令PROC和ENDP (6)
3.6 宏指令 (6)
3.7 ORG 伪指令 (6)
3.8 汇编结束伪指令END (6)
第4章汇编程序设计 (7)
4.1 简单程序设计 (7)
4.2分支程序设计 (7)
4.3循环程序设计 (7)
4.4 子程序设计 (7)
第5章汇编语言的优点与缺点 (8)
第6章汇编语言的特点 (8)
第7章汇编语言的应用 (9)
总结 (10)
参考文献 (11)
致谢词 (11)
第1章汇编语言概况
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
大多数情况下Linux程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux操作系统中也可以用完全用C语言来实现,再加上GCC这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。
第2章汇编语言的基本元素
2.1 汇编语言的语句格式
由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是:
[标识符] 指令助记符 [操作数][;注解]
其中用方括号括起来的部分可有可无。每部分之间用空格(至少一个)分开,一行最多可有132个字符。
2.2 汇编语言的运算符
1.算术运算符、逻辑运算符和关系运算符
算术运算符可以应用于数字操作数,结果也是数字。而应用于存储器操作数时,只有+、-运算符有意义。
2.取值运算符SEG、OFFSET、TYPE、SIZE和LENGTH
· SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。
· TYPE操作符返回一个表示存储器操作数类型的数值。各种存储器地址操作数类型部分的值如表3-1所示。
表3-1 存储器操作数的类型属性及返回值
· LENGTH和SIZE操作符只应用于数据存储器操作数。(用DB/DW/DD且用DUP等定义的操作数)
LENGTH返回一个与存储器地址操作数相联系的基本数据个数,
SIZE操作数返回一个为存储器操作数分配的字节数(即单元数)。
3.属性运算符
属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。常用的有:
(1) 合成运算符PTR
它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性,
一般格式:类型 PTR 表达式
功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。
例如:SLOT DW 25
此时SLOT已定义成字单元。若我们想取出它的第一个字节内容,则可用PTR 对其作用,使它暂时改变为字节单元。
2.3表达式
是由运算符和操作数组成的序列,在汇编时产生一个确定的值。这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。
1.常数
汇编语言语句中出现的常数可以有7种:
①二进制数后跟字母B,如01000001B。
②八进制数后跟字母Q或O,如202Q或202O。
③十进制数后跟D或不跟字母,如85D或85。
④十六进制数后跟H,如56H,0FFH。注意,当数字的第一个字符是A~F 时,在字符前应添加一个数字0,以示和变量的区别。
另有,十进制浮点数、十六进制实数、字符和字符串
2.常量操作数
常量操作数是一个数值操作数,一般是常量或者是表示常量的标识符。可以为数字常量操作数或字符串常量操作数。前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。
3.存储器操作数
存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。
存储器操作数可以分为变量及标号两者类型,如果存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么这个存储器操作数就称为变量;如果存储器操作数所代表的是某条指令代码在码段中的地址,那么这个存储器操作数称为标号。变量所对应的存储单元内容在程序的运行过程中是可以改变的,标号通常作为转移指令或调用指令的目标操作数,在程序运行过程中不能改变。
存储器操作数有三个方面的属性。
(1) 段地址:即存储器操作数所对应的存储单元所在段的段地址;
(2) 偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址;
(3) 类型:变量的类型是相应存储单元所存放的数据项的字节数;而标号的类型则反映了相应存储单元地址在作为转移或调用指令的目标操作数时的寻址方式,可有两种情况,即 NEAR和FAR。
4.常量表达式
由常量操作数及运算符构成,在汇编时产生一个常量。
如PORT、VAL十1、 OFFSET SUM、SEG SUM、TYPE CYCLE等。
5.地址表达式
由存储器操作数与运算符构成,必须有明确的物理意义。