资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
任务4 汇编语言简述,3.4.1汇编语言及语句格式 1.汇编语言和汇编程序的基本概念 汇编语言是一种面向CPU指令系统的程序设计语言,它采用指令助记符来表示操作码和操作数,用符号地址表示操作数地址。用汇编语言编写的程序能够直接利用硬件系统的特性,直接对位、字节、字寄存器、存储单元、I/O端口等进行处理,同时也能直接使用CPU指令系统和指令系统提供的各种寻址方式编制出高质量的程序,这种程序不但占用内存空间少,而且执行速度快。汇编语言编写的源程序在输入计算机后需要翻译成目标程序,计算机才能执行相应指令,这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序。汇编程序是将汇编语言源程序翻译成机器能够识别和执行的目标程序的一种系统软件。,下一页,返回,任务4 汇编语言简述,汇编程序是最早也是最成熟的一种系统软件,它除了能够将汇编语言源程序翻译成机器语言程序,还能根据用户的要求自动分配存储区域,包括程序区、数据区、暂存区等;自动把各种进制数转换成二进制数,把字符转换成ASCII码,计算表达式的值等;自动对源程序进行检查,给出错误信息,如非法格式、未定义的助记符、标号、漏掉的操作数等。具有这些功能的汇编程序称为基本汇编(assembler,ASM)。 在基本汇编的基础上,进一步允许在源程序中把一个指令序列定义为一条宏指令,并包含大量伪指令的汇编程序,称为宏汇编(macroasserahler, MASM)。它包含全部基本汇编的功能,还增加了宏指令、结构、记录等高级汇编语言功能。,下一页,返回,上一页,任务4 汇编语言简述,汇编程序以汇编语言源程序文件作为输入,并由它产生两种输出文件:目标程序文件和源程序列表文件。目标程序文件经连接定位后由计算机执行;源程序列表文件将列出源程序、目标程序的机器语言代码及符号表。符号表是汇编程序所提供的一种诊断手段,它包括程序中所用的所有符号和名字,以及这些符号和名字所指定的地址。如果程序出错,可以较容易地从这个符号表中检查出错误。 在编写源程序时,要严格遵守汇编语言程序的书写规范,否则就会出错。 2.汇编语言语句格式 汇编语言的语句组成部分:名字操作符操作数;注释其中带方括号的部分表示任选项。,下一页,返回,上一页,任务4 汇编语言简述,(1)名字字段:名字是一个符号,表示本条语句的符号地址。名字可以是标号和变量,它是由字母打头的字符串。在汇编语言程序中,指令语句的名字之后要用冒号“:”,而伪指令语句中名字之后不要加冒号“:”。 标号和变量具备如下3种属性。 段属性:该属性定义了标号和变量的段起始地址,其值必须在一个段寄存器中。标号的段是它所出现的对应代码段,由CS指示;变量的段通常由DS或者ES指示。 偏移属性:该属性表示标号和变量相距段起始地址的字节数,该数是一个16位无符号二进制数。,下一页,返回,上一页,任务4 汇编语言简述,类型属性:该属性对于标号而言,用于指出该标号是在本段内引用还是在其他段中引用,标号的类型有NEAR(段内引用)和FAR(段间引用);对于变量,其类型属性说明变量有几个字节长度,这一属性由定义变量的伪指令确定。 (2)操作符字段:操作符可以是机器指令、伪指令和宏指令的助记符。机器指令是CPU指令系统中的指令,汇编程序将其翻译成对应的机器码;伪指令不能翻译成对应的机器码,它只是在汇编过程中完成相应的控制操作,又称为汇编控制指令;宏指令是有限的一组指令(机器指令、伪指令)定义的代号,汇编时将根据其定义展开成相应的指令。 (3)操作数字段:是操作符的操作对象。当有两个或两个以上的操作数时,各操作数之间用逗号隔开。操作数一般有常数、寄存器、标号、变量和表达式等几种形式。,下一页,返回,上一页,任务4 汇编语言简述,常数:常数是没有属性的纯数,它的值在汇编时已完全确定,程序运行过程中不会发生变化。在8086宏汇编中,允许有二进制、八进制、十进制、十六进制常数和字符串常数。在指令中,常数通常被称为立即数,它只能用做源操作数,不能用做目标操作数。它的允许取值范围由指令中的目标操作数的形式自动确定为8位或16位。 存储器操作数:包括标号和变量。它可以用做源操作数,也可以用做目标操作数,但不能同时用做源操作数和目标操作数。标号是可执行的指令性语句的符号地址,它可以用做转移指令的转向目标操作数。变量是指存放在某些存储单元中的数据,这些数据在程序运行期间是可以改变的。变量通过标识符来引用,可用做存储器访问指令的源操作数和目标操作数。,下一页,返回,上一页,任务4 汇编语言简述,表达式:由常数、寄存器、标号、变量与一些运算符组合而成,一般有数字表达式和地址表达式两种。 (4)注释字段:以“;”开头的说明部分,是语句的非执行部分,可根据需要编写。一般情况下,注释用来说明一段程序或若干条语句的功能,以增加程序的可读性。 3.汇编语言中的标识符、表达式和运算符 (1)标识符:汇编语言语句格式第1个字段是它的名字字段,名字可以是标号或变量,这两者又称为标识符。 (2)表达式和运算符:在表达式中,运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共5种,如表3-7所示。,下一页,返回,上一页,表3-7 8086宏汇编中的运算符,返回,任务4 汇编语言简述,算术运算符用于完成算术运算,其中加、减、乘、除运算都是整数运算,结果也是整数。除法运算得到的是商的整数部分。求余运算是指两数整除后所得到的余数。 逻辑运算符的作用是对操作数进行按位操作。它与指令系统中的逻辑运算指令不同,运算后产生一个逻辑运算值,供给指令操作数使用,它不影响标志位。其中NOT(非)是单操作数运算符,其他3个逻辑运算符为双操作数运算符。 关系运算符都是双操作数运算符,它的运算对象只能是两个性质相同的项目。关系运算的结果只能是两种情况:关系成立或不成立。当关系成立时,运算结果为1;否则为0。,下一页,返回,上一页,任务4 汇编语言简述,分析运算符是对存储器地址进行运算的。它可以将存储器地址的3个重要属性,即段、偏移量和类型分离出来,返回到所在的位置做操作数使用。因此分析运算符又称为数值返回运算符。 分析运算符的相关功能如下。 SEG运算符可以得到一个标号或变量的段基址。 OFFSET运算符可以得到一个标号或变量的偏移量。 TYPE运算符可加在变量、结构或标号的前面,所求出的是这些存储器操作数的类型部分。 LENGTH运算符放在数组变量的前面,可以求出该数组中所包含的变量或结构的个数。 SIZE运算符在变量已经用重复操作符DUP加以说明后,可以得到分配给该变量的字节总数。如果未用DUP加以说明,则得到的结果是TYPE运算的结果。,下一页,返回,上一页,任务4 汇编语言简述,综合运算符可以用来建立和临时改变变量或标号的类型及存储器操作数的存储单元类型,而忽略当前的属性,所以又称为属性修改运算符。综合运算符的相关功能如下。 PTR运算符用来指定或修改存储器操作数的类型,但它本身并不实际分配存储器。 段属性前缀用于需要进行段超越寻址的场合。 THIS运算符和PTR运算符一样,可用来建立一个特殊类型的存储器地址操作数,而不为它分配实际的新的存储单元。用THIS建立的存储器地址操作数的段和偏移量部分与目前所能分配的下一个存储单元的段和偏移量相同,但类型由THIS指定。,下一页,返回,上一页,任务4 汇编语言简述,SHORT运算符用来修饰JMP指令中跳转地址的属性,指出跳转地址是在下一条指令地址的-128 B + 127B范围之内。 HIGH和LOW被称为字节分离运算符,它们将一个16位的数或表达式的高字节和低字节分离出来。 例3-13PTR运算符应用举例。 分析: VAR1 DB 30H,40H VAR2 DW 2050H MOV AX,WORD PTR VAR1 MOV BL,BYTE PTR VAR2,下一页,返回,上一页,任务4 汇编语言简述,在此例中,VAR1为字节变量,对应VAR1存储单元保存的数据为30 H,对应VAR1 + 1存储单元保存的数据为40H; VAR2为字变量,对应VAR2存储单元保存的数据为2050 H。在传送指令中,从字节变量VAR1存储单元和VAR1 + 1存储单元中取出一个字数据,赋给字寄存器AX;从字变量VAR2存储单元中取出1B数据,赋给字节寄存器BL。则有(AX)=4030 H,(BL)=50H。 例3-14对同一个数据区,要求既可以字节为单位,也可以字为单位进行存取。 分析: AREAI EQU THIS WORD AREA2 DB 100 DUP(?),下一页,返回,上一页,任务4 汇编语言简述,此例中,AREAI和AREA2实际上代表同一个数据区,共有100 B,AREA1的类型为 WORD,而AREA2的类型为BYTE。 将算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符同常数、寄存器名、标号、变量一起组成表达式,放在语句的操作数字段中。 汇编过程中,汇编程序先计算表达式的值,然后再翻译指令。在计算表达式的值时,如果一个表达式同时具有多个运算符,则按如下规则运算。 优先级高的先运算,优先级低的后运算。 优先级相同时,按表达式中从左到右的顺序运算。 括号可以提高运算的优先级,括号内的运算总是在相邻的运算之前进行。,下一页,返回,上一页,任务4 汇编语言简述,各类运算符从高到低的优先级排列顺序如表3-8所示。 3.4.2汇编语言程序结构 为便于分析汇编语言源程序的结构和特点,先看下面给出的一个完整的汇编语言源程序应用实例。 【例3-15】从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。其源程序如下。,下一页,返回,上一页,表3-8各类运算符的优先级别,返回,任务4 汇编语言简述,下一页,返回,上一页,任务4 汇编语言简述,下一页,返回,上一页,任务4 汇编语言简述,下一页,返回,上一页,任务4 汇编语言简述,从上述例子可看出,汇编语言源程序是分段结构形式。一个汇编语言源程序由若干个逻辑段组成,每个逻辑段以SEGMENT语句开始,以ENDS语句结束。整个源程序以END语句结束。每个逻辑段内有若干条语句,一个汇编源程序是由完成某种特定操作功能的语句组成的。通常,一个汇编源程序由3个逻辑段组成,即数据段、堆栈段和代码段。 (1)数据段用来在内存中建立一个适当容量的工作区,可对变量进行定义或预置初始数据。 (2)堆栈段用来在内存中建立一个适当的堆栈区,以便在中断、子程序调用时使用。堆栈段一般可以有几十字节至几千字节。如果太小,则可能导致程序执行中的堆栈溢出错误。,下一页,返回,上一页,任务4 汇编语言简述,(3)代码段包括了许多以符号表示的指令,其内容就是程序要执行的指令。作为一个汇编源程序的主模块,以下几部分是不可缺少的。 必须用ASSUME伪指令告诉汇编程序,某一段地址应该放入哪一个段寄存器。这样对源程序模块进行汇编时,才能确定段中各项的偏移量。 DOS的装入程序在执行时,将把cs初始化为正确的代码段地址,把SS初始化为正确的堆栈段地址,在源程序中不需要再对它们进行初始化。因为装入程序已经将DS寄存器留做他用,这是为了保证程序段在执行过程中数据段地址的正确性,所以在源程序中应该有以下两条指令对它进行初始化。 MOV AX,DATA MOV DS,AX 在DOS环境下,通常采用DOS的4CH号中断功能调用使汇编语言返回DOS,即采用如下两条指令。,下一页,返回,上一页,任务4 汇编语言简述,MOV AH,4CH INT 21H 如果不是主模块,这两条指令可以不用。由于8086的1MB存储空间是分段管理的,汇编语言源程序存放在存储器中,无论是取指令码还是存取操作数,都要访问内存。因此,汇编语言源程序的编写必须遵照存储器分段管理的规定,分段进行编写。,下一页,返回,上一页,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号