资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,汇编语言,程序设计,第,4,章,汇编语言与源程序结构,汇编语言源程序与汇编程序,汇编语言语句种类及其格式,汇编语言数据与运算符,伪指令,源程序结构模式,4.1 汇编语言源程序与汇编程序,1、汇编语言源程序,汇编语言源程序是用汇编语言编写的程序,简称汇编语言程序。汇编语言程序通过编辑程序在计算机中建立汇编语言源程序文件(,ASM,文件)。,2、汇编程序,将汇编语言源程序编译成目标程序的加工程序称为汇编程序。这一加工过程称为汇编。,汇编程序的作用就是把源程序文件(,ASM,文件)转换成用二进制代码表示的目标程序文件(,OBJ,文件)。,汇编程序的主要功能有:,检查源程序。测出源程序语法错误,并给出错误。,产生目标程序,并可给出列表文件 ,展开宏指令。,返回,4.2 汇编语言语句种类及其格式,语句是汇编语言源程序的基本组成单位。一个汇编语言源程序中有3种基本语句:指令语句、伪指令语句和宏指令语句。前两种是最常见、最基本的语句。指令语句和伪指令语句不仅在程序中的功能不同,而且实现其功能的方法和时间也是不同的。,1、指令语句,指令语句就是计算机中指令系统的各条指令,每条指令语句在汇编时都产生一个供,CPU,执行的机器目标代码,所以这种语句又称为可执行语句。,计算机中每条指令语句表示一种基本功能,这些基本功能是在程序运行期间由计算机硬件来实现的。一条指令语句由四个字段组成,其一般格式如下:,标号:指令助记符操作数;注释,(,1)标号,标号是指令语句的符号地址,它代表指令代码存放地址的第一个字节地址。,标号是指令语句的可选项,通常在一个程序段或子程序的入口指令语句选用标号,当程序需要转入这个程序段或调用子程序时,就可直接引用这标号。标号通常在代码段中定义,后面跟冒号,“,:,”,,它经常在转移指令或,CALL,指令中引用,用以表示转向地址,引用时标号后不跟冒号。,(2)指令助记符,指令助记符为指令语句的核心,是不可省略的主要部分,如,MOV,、,ADD,、,XOR,、,RCL,等等,它表示指令语句要求,CPU,完成的具体操作。,(3),操作数,操作数表示指令助记符的操作对象,不同的指令所带的操作数不同,有一个操作数的指令(如,INC,、,NOT,等),有二个操作数的指令(如,ADD,、,XOR,等),无操作数指令(如,CLC,、,STD,等)。,若需要操作数,则每一个操作数要依据寻址方式来表示。操作数可以是常数、寄存器、标号、变量和表达式。,(4)注释,注释是用来说明一段程序或一条或多条指令的功能,它是可选项,注释均以分号,“,;,”,开始,它可占一行或多行。注释还通常用于调试程序。注释是语句的非执行部分,因此,它不出现在机器目标代码中,也不影响指令语句的功能。,2、,伪指令语句,伪指令语句指示汇编程序在汇编源程序时完成某些工作,比如完成数据定义、分配存储区、指示程序结束等。,伪指令属于汇编控制命令,它所指示的操作是由汇编程序在汇编源程序时完成的,在汇编时,它不产生目标代码,在将源程序汇编成目标程序后,它就不复存在了。,综上所述可知,伪指令语句与指令语句的主要区别是:伪指令语句经汇编后不产生机器目标代码,而指令语句经汇编后将产生相应的机器目标代码;伪指令语句所指示的操作是在程序汇编时完成的,而指令语句的操作必须在程序运行时才能完成。一条伪指令语句也由四个字段组成,其一般格式如下:,符号名,伪指令符操作数,;注释,(1)符号名,符号名在伪指令语句中是一个可选项,符号名后面没有冒号,符号名可以是常量名、变量名、过程名等。,(2)伪指令符,伪指令符指定汇编程序要完成的具体操作,它是伪指令语句的核心部分,如数据定义伪指令,DB,、,DW,、,DD,,,段定义伪指令,SEGMENT,,,定义过程伪指令,PROC,等等。,(,3)操作数,伪指令中的操作数可以是常数、字符串、变量、表达式,其个数由具体的伪指令决定,各个操作数之间用,“,,,”,分隔。,(4)注释,伪指令语句的注释也是可选项,需要时必须以,“,;,”,开始。,3、,标识符,指令语句中的标号和伪指令语句中的符号名统称为标识符。它们由若干字符组成,标识符的组成规则如下:,(,1,)一个标识符由,1,-,3,个字符组成。,(,2,)组成标识符的字符可以是字母(,A-Z,或,a-z,)、,数字(,0-9,)、专用字符(,“,?,”,、,“,”,、,“,”,、,“,$,”,、,“,下划线,_,”,)。,(,3,)除数字外,上述其余字符均可作为标识符的首字符,,“,”,只能作为标识符的首字符。,(4)不能使用属于系统的专用保留字。,返回,4.3汇编语言数据与运算符,汇编语言的指令语句和伪指令语句操作数一般为常量、变量、标号、表达式。,1、常量,常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,且在程序运行中也不会发生变化。常量分为数值常量、字符串常量和符号常量,它主要用于指令语句中的立即数或伪指令语句中给变量赋初值等。,(1)数值常量,数值常量分为整数和实数。,例如:11100011,B,,45693,0,FF2AH,,356703,Q,都是正确的整数形式,,又如:543.567,45.23,1.2,E2,45.4E9,都是正确的实数形式。,(,2)字符串常量,字符串常量是用单引号括起来的一个字符或多个字符。字符串常量以单引号中各字符的,ASCII,码形式存储在内存中,如,H,,,在内存中就是,41,H,,,12,就是,31,H,,,32H,。,使用时可在单引号内直接写字符序列,如,12,AB,,,也可写字符的,ASCII,码,,ASCII,码之间用逗号分隔(此时不需要用单引号),如,31,H,,,32H,,,41H,,,42H,表示字符串,12,AB,。,(3),符号常量,符号常量是指用,EQU,伪指令或赋值语句,“,=,”,定义过的符号名,可作操作数项或在表达式中使用。,2、,变量,在汇编语言中,变量是一个数据存储单元的名称,即数据存放地址的符号表示。它代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以改变。为方便访问变量,在程序中通过变量名来使用变量。,(1),变量的定义,变量通常在数据段或附加段中使用数据定义伪指令来定义,定义变量就是给数据分配存储单元,有时为存储单元赋予一个变量名,并可同时为这些存储单元预置初值。数据定义伪指令的格式为:,变量名,DB(DW、DD、DQ、DT),表达式,1,,表达式,2,,,其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址;,DB,、,DW,、,DD,、,DQ,和,DT,是伪指令符,具体一条数据定义伪指令取,5,种之一。,DB,定义的是字节类型的变量,每个表达式被分配1个字节单元。,DW,定义的是字类型的变量,每一个表达式被分配1个字单元(2个字节)。,DD,定义的是双字类型的变量,每一个表达式被分配2个字单元(4个字节)。,DQ,定义的是四字类型的变量,每一个表达式被分配4个字单元(8个字节)。,DT,定义的是十字节类型的变量,每一个表达式被分配10个字节单元。,表达式,1,,表达式,2,是给变量或指定的存储单元赋予初值,它们有以下几种形式:,(,a,),数值表达式,数据定义伪指令可以为一个或连续的存储单元设置数值初值。,(,b,),字符串表达式,对于,DB,伪指令,字符串的长度允许超过,2,个字符,但不能超过,255,个字符,字符串必须用单引号括起来,它可为字符串中的每个字符分配,1,字节单元,字符串从左至右以字符的,ASCII,码形式按地址递增的顺序依次存放。,(,c,)?,表达式,不带引号的?,用于为变量预留内存单元,暂时不存入数据,即表示所定义的变量无确定的初值。,例如:,A DW,?,?,为变量,A,预留,2,个字单元。,(,d,),地址表达式,操作数为地址表达式时,只适用于,DW,和,DD,这两种数据定义伪指令。如果地址表达式为一变量(标号)名,用,DW,伪指令则是取它的偏移地址来初始化变量;用,DD,伪指令则是取它的段首地址和偏移地址来初始化变量。,(,e),带,DUP,的表达式,格式为:,n DUP (,表达式),其中,n,为重复因子,只能取正整数,它表示定义了,n,个数据存储单元。,(2),变量的属性,由于存储器是分段使用的,因而源程序定义的变量具有,3,个属性:,(,a,),段属性(,SEG,),变量的段属性是指定义变量时它所在段的段首地址。,(,b,),偏移属性(,OFFSET,),变量的偏移属性是指所在段的段首地址到定义该变量的位置之间的字节数(即偏移地址)。上述的段属性和偏移属性值就构成了一个变量的逻辑地址。,(,c,),类型属性(,TYPE,),变量的类型属性表示存储变量时所占存储单元的字节个数。,(3),变量的使用,定义后的变量,在程序中的引用有两种情况:,(,a,),在指令语句中,采用存储器操作数的几种寻址方式,除寄存器间接寻址方式不使用变量名外,其余各种寻址方式均可使用变量名。,例如,某数据段已定义一变量,ARRAY,:,ARRAY DW 5000H,,,4000H,(,b,),在数据定义伪指令,DW,和,DD,中,操作数字段可直接引用已定义过的变量名。,如:,A DB 50H,,,40H,B DW A,C DD B,3、标号,标号是一条指令语句的符号地址,在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,以便在控制转移指令中直接引用这个标号。标号一般在代码段中定义和引用。由于标号代表了指令的符号地址,所以标号也有,3,个属性:,(,a,),段属性(,SEG,)。,标号的段属性是指标号定义所在段的段首地址。,(,b,),偏移属性(,OFFSET,)。,标号的偏移属性是指标号所在段的段首地址到该标号的字节距离。,(,c,),类型属性(,TYPE,)。,标号的类型属性表示了它的转移特性,即该标号是作为段内还是段间转移(或调用)指令的目标地址。标号的类型属性有,2,种:,NEAR,类型和,FAR,类型。,4、表达式和运算符,汇编语言的指令语句和伪指令语句中,表达式是操作数项的常见形式,表达式是由常量、变量、标号用运算符连接而成有意义的式子。表达式分为数值表达式和地址表达式,任一表达式的值只计算一次,表达式的计算是在源程序汇编过程中进行的,而不是在程序运行中进行的,汇编程序将表达式计算后得到一个数值或一个地址。,在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算符、数值返回运算符、属性运算符和字节分离运算符。,(1)数值表达式,数值表达式是由常量与算术运算符、逻辑运算符或关系运算符构成的有意义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它只有大小而没有属性。,(2)地址表达式,地址表达式是由常量、变量、标号、寄存器(,BX、BP、SI、DI),内容(用寄存器名加方括号表示)和运算符组成的有意义的式子。单个的变量、标号、寄存器的内容是地址表达式的特例。,地址表达式中可以使用算术运算符中的,“,+,”,、,“,-,”,运算符和关系运算符。,在地址表达式中,常用的形式是:变量,常量。,地址表达式除使用数值表达式的运算符外,还可以使用特殊算符。,(,a),属性运算符,属性运算符主要用于临时修改变量、标号或某个内存单元中的操作数的类型属性。,段超越前缀,“,:,”,。,其格式为:段寄存器名:地址表达式,或段名:地址表达式,类型运算符,PTR。,其使用格式为:类型,PTR,地址表达式,根据地址表达式的不同值,类型可以是,BYTE、WORD、DWORD、NEAR、FAR,等。,定义类型运算符,THIS。,其格式为:标识符,EQU THIS,类型,(,b),数值返回运算符,数值返回运算符有5种,这些运算符的运算对象必须是变量或标号,其功能是分离出变量或标号的段、偏移地址及类型的属性值,运算结果为一数值常量。,SEG,运算符,格式:,SEG,变量或标号,功能:分离
展开阅读全文