汇编语言源程序格式课件

上传人:痛*** 文档编号:241571345 上传时间:2024-07-05 格式:PPT 页数:98 大小:1.52MB
返回 下载 相关 举报
汇编语言源程序格式课件_第1页
第1页 / 共98页
汇编语言源程序格式课件_第2页
第2页 / 共98页
汇编语言源程序格式课件_第3页
第3页 / 共98页
点击查看更多>>
资源描述
第第2 2章章 汇编语言程序格式汇编语言程序格式 第第2 2章章 汇编语言程序格式汇编语言程序格式2.1 2.1 汇编语言语句格式汇编语言语句格式2.2 2.2 伪指令伪指令2.3 2.3 汇编语言源程序基本框架汇编语言源程序基本框架第第2 2章章 汇编语言程序格式汇编语言程序格式 2.1 2.1 汇编语言语句格式汇编语言语句格式同其他程序设计语言一样,汇编语言的翻译器同其他程序设计语言一样,汇编语言的翻译器(汇编程序)对源程序有严格的格式要求。这样,(汇编程序)对源程序有严格的格式要求。这样,汇编程序才能确切翻译源程序,形成功能等价的汇编程序才能确切翻译源程序,形成功能等价的机器指令(目标代码),连接后能直接运行。汇机器指令(目标代码),连接后能直接运行。汇编语言程序格式就是汇编语言必须遵循的语法规编语言程序格式就是汇编语言必须遵循的语法规则。则。第第2 2章章 汇编语言程序格式汇编语言程序格式 2.1.1 2.1.1 汇编语言语句类型汇编语言语句类型 汇编语言源程序由语句序列构成,汇编语言程序中的语句可以分为汇编语言源程序由语句序列构成,汇编语言程序中的语句可以分为指令语句、伪指令语句和宏指令语句三种。指令语句、伪指令语句和宏指令语句三种。(1)(1)指令语句:对应于指令语句:对应于CPUCPU指令系统中的一条机器指令,由指令系统中的一条机器指令,由CPUCPU执执行,能完成一定操作功能,能够翻译成机器代码的语句。行,能完成一定操作功能,能够翻译成机器代码的语句。(2)(2)伪指令语句:无对应的机器指令,不由伪指令语句:无对应的机器指令,不由CPUCPU执行,只为汇编执行,只为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码的语句。的语句。(3)(3)宏指令语句:就是由若干条指令语句形成的语句,一条宏指宏指令语句:就是由若干条指令语句形成的语句,一条宏指令语句的功能相当于若干条指令语句的功能,详见第令语句的功能相当于若干条指令语句的功能,详见第5 5章。章。第第2 2章章 汇编语言程序格式汇编语言程序格式 2.1.2 2.1.2 汇编语言语句格式汇编语言语句格式汇编语言源程序中的每个语句可以由汇编语言源程序中的每个语句可以由4 4项组成,格式如下:项组成,格式如下:名字:名字:操作码操作码 操作数操作数,操作数,操作数 ;注释;注释 其中,名字项是一个符号项。其中,名字项是一个符号项。操作码项是一个操作码的助记符,它可以是指令、伪指令或宏指令操作码项是一个操作码的助记符,它可以是指令、伪指令或宏指令名。名。操作数项由一个或多个表达式组成,它提供为执行所要求的操作而操作数项由一个或多个表达式组成,它提供为执行所要求的操作而需要的信息。需要的信息。注释项用来说明程序或语句的功能。注释项用来说明程序或语句的功能。“;”为识别注释项的开始。为识别注释项的开始。带方括号的项是可选项,需要根据具体情况而定。带方括号的项是可选项,需要根据具体情况而定。汇编语言源程序中的每条语句一般占一行,各项之间必须用空格或汇编语言源程序中的每条语句一般占一行,各项之间必须用空格或制表符作为分隔符,操作数之间用逗号分隔。制表符作为分隔符,操作数之间用逗号分隔。第第2 2章章 汇编语言程序格式汇编语言程序格式 1 1 1 1名字项名字项名字项名字项名字是用户按照一定规则定义的标识符,可由下列符号组成:名字是用户按照一定规则定义的标识符,可由下列符号组成:字母字母 A AZ Z、a az z数字数字 0 09 9 特殊字符特殊字符?、.、_ _、$数字不能作名字项的第一个字符。而圆点仅能用作第一个字符,可数字不能作名字项的第一个字符。而圆点仅能用作第一个字符,可以用很多字符来说明名字,但只有前面的以用很多字符来说明名字,但只有前面的3131个字符能被汇编程序所个字符能被汇编程序所识别。为了便于记忆,名字的定义应该能够见名知义,如用识别。为了便于记忆,名字的定义应该能够见名知义,如用BUFFERBUFFER表示缓冲区、表示缓冲区、SUMSUM表示累加和等。表示累加和等。名字有两种形式:标号或变量。指令语句中的名字通常用标号表示,名字有两种形式:标号或变量。指令语句中的名字通常用标号表示,而伪指令语句中的名字通常用变量名、段名和过程名表示,多数情而伪指令语句中的名字通常用变量名、段名和过程名表示,多数情况下用变量名表示。况下用变量名表示。第第2 2章章 汇编语言程序格式汇编语言程序格式(1)(1)标号标号标号在代码段中定义,也可以用标号在代码段中定义,也可以用EQUEQU或或LABELLABEL伪指伪指令来定义,标号与其所代表的指令之间用冒号分令来定义,标号与其所代表的指令之间用冒号分开,用来代表一条指令所在单元的地址。标号也开,用来代表一条指令所在单元的地址。标号也可以作为过程名定义。标号经常在转移指令的操可以作为过程名定义。标号经常在转移指令的操作数字段出现,用以表示转向的目标地址。标号作数字段出现,用以表示转向的目标地址。标号在命名时,应尽量取有意义的字符,以便程序的在命名时,应尽量取有意义的字符,以便程序的阅读和理解。阅读和理解。第第2 2章章 汇编语言程序格式汇编语言程序格式 标号有标号有3 3种属性:段属性、偏移属性和类型属性。种属性:段属性、偏移属性和类型属性。段属性:标号所代表指令单元的段起始地址,此值必须段属性:标号所代表指令单元的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在在一个段寄存器中,而标号的段则总是在CSCS寄存器中。寄存器中。偏移属性:标号所代表指令单元的段内偏移地址,标号偏移属性:标号所代表指令单元的段内偏移地址,标号的偏移地址是从段起始地址到定义标号的位置之间的字的偏移地址是从段起始地址到定义标号的位置之间的字节数。对于节数。对于1616位段是位段是1616位无符号数。位无符号数。类型属性:用来指出标号是在本段内引用还是在其他段类型属性:用来指出标号是在本段内引用还是在其他段中引用的。如是在段内引用的,则称为中引用的。如是在段内引用的,则称为NEARNEAR,转移源和,转移源和转移目标在同一个代码段中,转移时,只改变转移目标在同一个代码段中,转移时,只改变IPIP值,不值,不改变改变CSCS值;如在段外引用,则称为值;如在段外引用,则称为FARFAR,转移源和转移目,转移源和转移目标在不同的代码段中,转移时,既改变标在不同的代码段中,转移时,既改变IPIP值,又改变值,又改变CSCS值。值。第第2 2章章 汇编语言程序格式汇编语言程序格式(2)(2)变量变量 变量在除代码段以外的其它段中定义,变量在除代码段以外的其它段中定义,后面不跟冒号。它也可以用后面不跟冒号。它也可以用EQUEQU或或LABELLABEL伪指令来伪指令来定义。变量是一个可以存放数据的存储单元的名定义。变量是一个可以存放数据的存储单元的名字,即存放数据的存储单元的地址符号名。变量字,即存放数据的存储单元的地址符号名。变量用用DBDB、DWDW、DDDD定义,此时变量名仅表示该数据区定义,此时变量名仅表示该数据区或存储区的第一个数据单元的首地址。变量经常或存储区的第一个数据单元的首地址。变量经常在操作数字段出现。在操作数字段出现。第第2 2章章 汇编语言程序格式汇编语言程序格式 变量也有变量也有3 3种属性:段属性、偏移属性和类型属性。种属性:段属性、偏移属性和类型属性。段属性:段属性:段属性:段属性:变量所代表数据单元的段起始地址,此值必须变量所代表数据单元的段起始地址,此值必须在一个段寄存器中(在一个段寄存器中(DSDS、ESES或或SSSS中)。中)。偏移属性:偏移属性:偏移属性:偏移属性:变量所代表数据单元的段内偏移地址,变量变量所代表数据单元的段内偏移地址,变量的偏移地址是从段的起始地址到定义变量的位置之间的的偏移地址是从段的起始地址到定义变量的位置之间的字节数。对于字节数。对于1616位段是位段是1616位无符号数。在当前段内给出位无符号数。在当前段内给出变量的偏移值等于当前地址计数器的值,当前地址计数变量的偏移值等于当前地址计数器的值,当前地址计数器的值可以用器的值可以用$来表示。来表示。类型属性:类型属性:类型属性:类型属性:变量的类型属性定义该变量所保留的字节数,变量的类型属性定义该变量所保留的字节数,如如BYTEBYTE(1 1个字节长),个字节长),WORDWORD(2 2个字节长),个字节长),DWORDDWORD(4 4个字节长)。这一点,将在数据定义伪指令中说明。个字节长)。这一点,将在数据定义伪指令中说明。在同一个程序中,同样的标号或变量的定义只允许出现在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。一次,否则汇编程序会指示出错。第第2 2章章 汇编语言程序格式汇编语言程序格式 2 2操作码项操作码项操作码项可以是指令、伪指令或宏指令的助记符。助记操作码项可以是指令、伪指令或宏指令的助记符。助记符表示指令语句的功能,如符表示指令语句的功能,如INCINC、MOVMOV等,其符号与意义等,其符号与意义是由系统定义的,编程时必须照写不误,既不能多写,是由系统定义的,编程时必须照写不误,既不能多写,也不能少写,如果指令带有前缀(如也不能少写,如果指令带有前缀(如REPREP、REPEREPE等),则等),则指令前缀和指令助记符要用空格分开。指令前缀和指令助记符要用空格分开。对于指令,汇编程序将其翻译为机器语言指令。对于伪对于指令,汇编程序将其翻译为机器语言指令。对于伪指令,汇编程序将根据其所要求的功能进行处理。对于指令,汇编程序将根据其所要求的功能进行处理。对于宏指令,则将根据其定义展开。在第宏指令,则将根据其定义展开。在第5 5章中将会专门讨论。章中将会专门讨论。第第2 2章章 汇编语言程序格式汇编语言程序格式 3 3操作数项操作数项 指令中的操作数用来指定参与操作的数据。对于指令中的操作数用来指定参与操作的数据。对于一般指令,可以有一个或两个操作数,也可以没一般指令,可以有一个或两个操作数,也可以没有操作数;对于伪指令和宏指令,可以根据需要有操作数;对于伪指令和宏指令,可以根据需要有多个操作数。操作数多于一个时,各操作数之有多个操作数。操作数多于一个时,各操作数之间用逗号分开。间用逗号分开。第第2 2章章 汇编语言程序格式汇编语言程序格式 操作数可以是常数、寄存器、标号、变量或由表操作数可以是常数、寄存器、标号、变量或由表达式组成。在这里,将专门对表达式加以说明。达式组成。在这里,将专门对表达式加以说明。表达式是常数、标号、变量、寄存器与一些操作表达式是常数、标号、变量、寄存器与一些操作符相组合的序列,可以有数字表达式和地址表达符相组合的序列,可以有数字表达式和地址表达式两种。数字表达式由汇编程序根据优先级规则式两种。数字表达式由汇编程序根据优先级规则计算得到一个常数值。地址表达式由汇编程序计计算得到一个常数值。地址表达式由汇编程序计算得到一个地址或一个常数值(地址间的距离长算得到一个地址或一个常数值(地址间的距离长度)。度)。组成表达式的操作符有算术、逻辑、关系、数值组成表达式的操作符有算术、逻辑、关系、数值返回、属性操作符。返回、属性操作符。第第2 2章章 汇编语言程序格式汇编语言程序格式 常用的操作符常用的操作符 算术操作符算术操作符逻辑与移位运算符逻辑与移位运算符关系运算符关系运算符 数值返回运算符数值返回运算符 属性运算符属性运算符 第第2 2章章 汇编语言程序格式汇编语言程序格式(1)(1)算术操作符算术操作符算术运算符包括:算术运算符包括:+、*、/、MODMOD(取余)。(取余)。运算符运算符MODMOD是作除法操作,取余数,如是作除法操作,取余数,如10 MOD 3=110 MOD 3=1。算术运算符可以用于数字表达式或地址表达式中。但当算术运算符可以用于数字表达式或地址表达式中。但当它用于地址表达式时,只有当其结果有明确的物理意它用于地址表达式时,只有当其结果有明确的物理意义时才是有效的结果,例如,两个地址相乘或相除是义时才是有效的结果,例如,两个地址相乘或相除是无意义的。在地址表达式中,可以用无意义的。在地址表达式中,可以用+或或-,但也必须,但也必须注意其物理意义,例如把两个不同段的地址相加也是注意其物理意义,例如把两个不同段的地址相加也是无意义的。经常使用的方法是无意义的。经常使用的方法是“地址地址常量常量”来描述来描述指针的移动,例如,指针的移动,例如,SUM+1SUM+1是指是指SUMSUM字节单元的下一个字节单元的下一个字节单元的地址(注意:不是指字节单元的地址(注意:不是指SUMSUM单元的内容加单元的内容加1 1),),而而SUM-1SUM-1则是指则是指SUMSUM字节单元的前一个字节单元的地址。字节单元的前一个字节单元的地址。第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.12.1】将首地址为将首地址为ARRAYARRAY的字数组的第的字数组的第6 6个字传送到个字传送到DXDX寄存器中。寄存器中。MOV DXMOV DX,ARRAY+(6-1)*2ARRAY+(6-1)*2【例例2.22.2】数组数组ARRARR定义如下,试写出把数组长度定义如下,试写出把数组长度(字数字数)存入存入CXCX寄存器的指令。寄存器的指令。ARR DW 1ARR DW 1,2 2,3 3,4 4,5 5,6 6,7 7ARREND DW ARREND DW?其中,其中,ARRENDARREND是为计算数组长度而建立的符号地址,则是为计算数组长度而建立的符号地址,则指令如下:指令如下:MOV CXMOV CX,(ARREND-ARR)/2(ARREND-ARR)/2汇编程序在汇编期间将计算出表达式的值而形成指令:汇编程序在汇编期间将计算出表达式的值而形成指令:MOV CXMOV CX,7 7第第2 2章章 汇编语言程序格式汇编语言程序格式(2)(2)逻辑与移位运算符逻辑与移位运算符逻辑运算符逻辑运算符逻辑运算符包括:逻辑运算符包括:ANDAND(逻辑与)、(逻辑与)、OROR(逻辑或)、(逻辑或)、XORXOR(逻辑异或)、(逻辑异或)、NOTNOT(逻辑非)。(逻辑非)。逻辑运算符是按位操作的,它的操作数只能是数字,且逻辑运算符是按位操作的,它的操作数只能是数字,且结果也为数字。逻辑运算符只能用在数字表达式中,不结果也为数字。逻辑运算符只能用在数字表达式中,不能用在地址表达式中。逻辑运算符和逻辑运算指令是有能用在地址表达式中。逻辑运算符和逻辑运算指令是有区别的,逻辑运算符的功能在汇编阶段完成,逻辑运算区别的,逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能是在程序执行阶段完成。要注意指令的功能是在程序执行阶段完成。要注意ANDAND、OROR、XORXOR、NOTNOT不是助记符,而是运算符。不是助记符,而是运算符。第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.32.3】AND ALAND AL,78H AND 0FH78H AND 0FH等价于:等价于:AND ALAND AL,08H08H【例例2.42.4】设设VALUEVALUE是字节型变量,分析下面这条语句执是字节型变量,分析下面这条语句执行完行完ALAL寄存器的内容。寄存器的内容。MOV ALMOV AL,VALUE AND 01HVALUE AND 01H在汇编后,该语句的源操作数(在汇编后,该语句的源操作数(VALUE AND 01HVALUE AND 01H)可能产)可能产生两个结果之一:当生两个结果之一:当VALUEVALUE值的值的D0D0位为位为1 1时,时,VALUEVALUE和和0101与与操作的结果为操作的结果为01H01H,则该语句变成,则该语句变成MOV ALMOV AL,01H01H;当;当VALUEVALUE值的值的D0D0位为位为0 0时,时,VALUEVALUE和和0101与操作的结果为与操作的结果为00H00H,则该语句变成则该语句变成MOV ALMOV AL,00H00H。因此,执行后。因此,执行后ALAL寄存器的寄存器的内容为内容为01H01H或或00H00H。第第2 2章章 汇编语言程序格式汇编语言程序格式 移位运算符移位运算符移位运算符有:移位运算符有:SHLSHL(逻辑左移)、(逻辑左移)、SHRSHR(逻辑右移)(逻辑右移)格式:格式:表达式表达式 SHLSHL(或(或SHRSHR)n n(移位次数)(移位次数)汇编程序将表达式左移或右移汇编程序将表达式左移或右移n n位,高位或低位补位,高位或低位补0 0,若移位,若移位次数大于次数大于1515,则结果为,则结果为0 0。【例例2.52.5】VAL EQU 5HVAL EQU 5H;符号常量;符号常量VALVAL值值=5H=5H MOV AL MOV AL,VAL SHR 1VAL SHR 1;VAL=00000101BVAL=00000101B逻辑逻辑 右移右移1 1位为位为00000010=200000010=2注意:移位运算符注意:移位运算符SHL/SHRSHL/SHR在操作数中,汇编时对常量进行在操作数中,汇编时对常量进行移位;而移位指令移位;而移位指令SHL/SHRSHL/SHR是在指令的操作码位置,执行时是在指令的操作码位置,执行时对寄存器或存储器单元中的操作数移位。对寄存器或存储器单元中的操作数移位。第第2 2章章 汇编语言程序格式汇编语言程序格式(3)(3)关系运算符关系运算符关系运算符包括:关系运算符包括:EQEQ(等于)、(等于)、NENE(不等)、(不等)、LTLT(小于)、(小于)、GTGT(大于)、(大于)、LELE(小于等于)、(小于等于)、GEGE(大于等于)(大于等于)6 6种。种。格式:格式:表达式表达式1 1 关系运算符关系运算符 表达式表达式2 2计算结果,若关系成立,则为全计算结果,若关系成立,则为全1 1,即,即0FFFFH0FFFFH;关系不成立,则为全关系不成立,则为全0 0。第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.62.6】MOV BXMOV BX,32 EQ 4532 EQ 45 等价于:等价于:MOV BXMOV BX,0 0【例例2.72.7】MOV BXMOV BX,56 GT 3056 GT 30 等价于:等价于:MOV BXMOV BX,0FFFFH0FFFFH【例例2.82.8】MOV BXMOV BX,(VAL LT 5)AND 20)OR(VAL(VAL LT 5)AND 20)OR(VAL GE 5)AND 30)GE 5)AND 30)当当VALVAL5 5时,汇编结果应该是:时,汇编结果应该是:MOV BXMOV BX,2020 当当VALVAL5 5时,汇编结果应该是:时,汇编结果应该是:MOV BXMOV BX,3030第第2 2章章 汇编语言程序格式汇编语言程序格式(4)(4)数值返回运算符数值返回运算符数值返回运算符包括:数值返回运算符包括:SEG(SEG(取段地址取段地址)、OFFSETOFFSET(取偏移地址取偏移地址)、TYPE(TYPE(取类型值取类型值)、LENGTH(LENGTH(取长取长度度)、SIZE(SIZE(取总字节数取总字节数)这些操作符把一些特征或存储器地址的一部分作这些操作符把一些特征或存储器地址的一部分作为数值回送,但不改变源操作数的属性。为数值回送,但不改变源操作数的属性。第第2 2章章 汇编语言程序格式汇编语言程序格式 SEGSEG格式:格式:SEG SEG 变量名变量名/标号标号汇编程序将回送变量或标号的段地址值。汇编程序将回送变量或标号的段地址值。【例例2.92.9】如果如果DATA_SEGDATA_SEG是从存储器的是从存储器的05000H05000H开始的一个开始的一个数据段的段名,数据段的段名,OPER1OPER1是该段中的一个变量名,则是该段中的一个变量名,则MOV BXMOV BX,SEG OPER1SEG OPER1将把将把05000H05000H作为立即数插入指令。实际上,由于段地址作为立即数插入指令。实际上,由于段地址是由连接程序分配的,所以该立即数是连接时插入的。是由连接程序分配的,所以该立即数是连接时插入的。执行期间则使执行期间则使BXBX寄存器的内容变成为寄存器的内容变成为05000H05000H第第2 2章章 汇编语言程序格式汇编语言程序格式 OFFSETOFFSET格式:格式:OFFSET OFFSET 变量名变量名/标号标号 汇编程序将回送变量或标号的偏移地址。汇编程序将回送变量或标号的偏移地址。【例例2.102.10】MOV BXMOV BX,OFFSET OPER_2OFFSET OPER_2汇编程序将汇编程序将OPER_2OPER_2的偏移地址作为立即数回送给的偏移地址作为立即数回送给指令,而在执行时则将该偏移地址装入指令,而在执行时则将该偏移地址装入BXBX寄存器寄存器中,所以这条指令与中,所以这条指令与LEA BXLEA BX,OPER_2OPER_2是等价的。是等价的。第第2 2章章 汇编语言程序格式汇编语言程序格式 TYPETYPE格式:格式:TYPE TYPE 变量名变量名/标号标号 如果该表达式是变量,则汇编程序将回送变量的以字节如果该表达式是变量,则汇编程序将回送变量的以字节数表示的类型:数表示的类型:DBDB为为1 1,DWDW为为2 2,DDDD为为4 4。如果该表达式是。如果该表达式是标号,则汇编程序将回送代表该标号类型数值:标号,则汇编程序将回送代表该标号类型数值:NEARNEAR为为-1 1,FARFAR为为-2-2。如果表达式为常数,则应回送。如果表达式为常数,则应回送0 0。【例例2.112.11】ARRAY DW 1ARRAY DW 1,2 2,3 3则对于指令:则对于指令:ADD SIADD SI,TYPE ARRAYTYPE ARRAY汇编程序将其形成为:汇编程序将其形成为:ADD SIADD SI,2 2第第2 2章章 汇编语言程序格式汇编语言程序格式 LENGTHLENGTH格式:格式:LENGTH LENGTH 变量名变量名对于变量中使用对于变量中使用DUPDUP的情况,汇编程序将回送分的情况,汇编程序将回送分配给该变量的单元数,对于其他情况则送配给该变量的单元数,对于其他情况则送1 1。【例例2.122.12】FEES DW 100 DUP(0)FEES DW 100 DUP(0)对于指令:对于指令:MOV CXMOV CX,LENGTH FEESLENGTH FEES汇编程序将其形成为:汇编程序将其形成为:MOV CXMOV CX,100100第第2 2章章 汇编语言程序格式汇编语言程序格式 SIZESIZE格式:格式:SIZE SIZE 变量名变量名汇编程序应回送分配给该变量的总字节数,也就汇编程序应回送分配给该变量的总字节数,也就是是LENGTHLENGTH和和TYPETYPE的乘积,即:的乘积,即:SIZE=LENGTHSIZE=LENGTHTYPETYPE【例例2.132.13】FEES DW 100 DUP(0)FEES DW 100 DUP(0)对于指令:对于指令:MOV CXMOV CX,SIZE FEESSIZE FEES汇编程序将其形成为:汇编程序将其形成为:MOV CXMOV CX,200200第第2 2章章 汇编语言程序格式汇编语言程序格式(5)(5)属性运算符属性运算符属性运算符包括:属性运算符包括:PTR(PTR(属性修改运算符属性修改运算符)、“:”(段跨越前缀符)和(段跨越前缀符)和SHORTSHORT(短取代运算符)。(短取代运算符)。PTRPTR格式:格式:类型类型 PTR PTR 表达式表达式是属性修改运算符,用是属性修改运算符,用PTRPTR来建立符号地址,但来建立符号地址,但它本身并不分配存储器,只是用来给已分配的存它本身并不分配存储器,只是用来给已分配的存储地址赋予另一种属性,使该地址具有另一种类储地址赋予另一种属性,使该地址具有另一种类型,仅在本语句有效。格式中的类型字段表示所型,仅在本语句有效。格式中的类型字段表示所赋予的新的类型属性,而表达式字段则是被取代赋予的新的类型属性,而表达式字段则是被取代类型的符号地址。类型的符号地址。第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.162.16】已有数据定义如下:已有数据定义如下:ARRAY DW ARRAY DW?可以用以下语句对这两个字节赋予另一种类型定义:可以用以下语句对这两个字节赋予另一种类型定义:ARRAY1 EQU BYTE PTR ARRAYARRAY1 EQU BYTE PTR ARRAYARRAY2 EQU BYTE PTR(ARRAY+1)ARRAY2 EQU BYTE PTR(ARRAY+1)这里,这里,ARRAYARRAY和和ARRAY1ARRAY1两个符号地址具有相同的段地址和两个符号地址具有相同的段地址和偏移地址,但是它们的属性类型不同,前者为偏移地址,但是它们的属性类型不同,前者为1 1,后者为,后者为2 2。第第2 2章章 汇编语言程序格式汇编语言程序格式 此外,有时指令中也要求使用此外,有时指令中也要求使用PTRPTR运算符。例如,运算符。例如,当汇编程序遇到当汇编程序遇到“MOV BXMOV BX,5 5”指令时,指令指令时,指令要求把立即数要求把立即数5 5存入存入BXBX寄存器内容所指定的存储寄存器内容所指定的存储单元中,但是,汇编程序不能分清是存入字单元单元中,但是,汇编程序不能分清是存入字单元还是字节单元,此时必须用还是字节单元,此时必须用PTRPTR运算符来说明属运算符来说明属性,应该写明:性,应该写明:MOV BYTE PTR BXMOV BYTE PTR BX,5 5或或MOV WORD PTR BXMOV WORD PTR BX,5 5第第2 2章章 汇编语言程序格式汇编语言程序格式:格式:格式:段寄存器:地址表达式段寄存器:地址表达式“:”称为段运算符,又称为段跨越前缀符。用称为段运算符,又称为段跨越前缀符。用于临时给变量、标号或地址表达式指定一个段属于临时给变量、标号或地址表达式指定一个段属性,地址表达式的性,地址表达式的EAEA和类型属性不变。在指令中和类型属性不变。在指令中代替默认的段以形成物理地址。代替默认的段以形成物理地址。【例例2.172.17】MOV AXMOV AX,ESES:BX+SIBX+SI;PA=ES*16+EAPA=ES*16+EA,临时替换默认的,临时替换默认的DSDS第第2 2章章 汇编语言程序格式汇编语言程序格式 SHORTSHORT短取代运算符,用来修饰短取代运算符,用来修饰JMPJMP指令中转向地址的指令中转向地址的属性,指出转向地址是在下一条指令地址的属性,指出转向地址是在下一条指令地址的-128-128+127+127个字节范围内。个字节范围内。【例例2.182.18】JMP SHORT NEXTJMP SHORT NEXTNEXTNEXT:MOV AXMOV AX,BXBX第第2 2章章 汇编语言程序格式汇编语言程序格式(6)(6)运算符的优先级运算符的优先级以上说明了以上说明了5 5类常用的运算符,在计算表达式时,应该首先计算优先类常用的运算符,在计算表达式时,应该首先计算优先级高的运算符,同级运算符从自左向右进行计算。下面给出运算符级高的运算符,同级运算符从自左向右进行计算。下面给出运算符的优先级别,从高到低排列如下:的优先级别,从高到低排列如下:()()、LENGTHLENGTH、SIZESIZE,然后是段跨越前缀符,然后是段跨越前缀符“:”PTRPTR、OFFSETOFFSET、SEGSEG、TYPETYPE、THISTHIS以及段运算符以及段运算符HIGHHIGH、LOWLOW*、/、MODMOD、SHLSHL、SHRSHR+、-EQEQ、NENE、LTLT、LELE、GTGT、GEGENOTNOTANDANDOROR、XORXORSHORTSHORT第第2 2章章 汇编语言程序格式汇编语言程序格式 4 4注释项注释项注释项由分号注释项由分号“;”开始,用来说明一条指令或开始,用来说明一条指令或一段程序的功能,它不属于程序本身,在汇编过一段程序的功能,它不属于程序本身,在汇编过程中,汇编程序不会对注释作任何加工,这部分程中,汇编程序不会对注释作任何加工,这部分不产生机器代码,注释只是为了增加程序的可读不产生机器代码,注释只是为了增加程序的可读性,便于阅读、理解和修改程序。对于汇编语言性,便于阅读、理解和修改程序。对于汇编语言程序来说,注释项的作用是很明显的,读者应该程序来说,注释项的作用是很明显的,读者应该在编写汇编程序的过程中,注意学会写好注释。在编写汇编程序的过程中,注意学会写好注释。第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2 2.2 伪指令伪指令2.2.1 2.2.1 2.2.1 2.2.1 处理器选择伪指令处理器选择伪指令处理器选择伪指令处理器选择伪指令2.2.2 2.2.2 2.2.2 2.2.2 数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令2.2.3 2.2.3 2.2.3 2.2.3 模块命名和标题伪指令模块命名和标题伪指令模块命名和标题伪指令模块命名和标题伪指令2.2.4 2.2.4 2.2.4 2.2.4 程序结束伪指令程序结束伪指令程序结束伪指令程序结束伪指令(END)(END)(END)(END)2.2.5 2.2.5 2.2.5 2.2.5 完整段定义伪指令(完整段定义伪指令(完整段定义伪指令(完整段定义伪指令(SEGMENTSEGMENTSEGMENTSEGMENT、ENDSENDSENDSENDS、ASSUME ASSUME ASSUME ASSUME)2.2.6 2.2.6 2.2.6 2.2.6 简化段定义伪指令简化段定义伪指令简化段定义伪指令简化段定义伪指令2.2.7 2.2.7 2.2.7 2.2.7 表达式赋值伪指令表达式赋值伪指令表达式赋值伪指令表达式赋值伪指令2.2.8 2.2.8 2.2.8 2.2.8 定位伪指令定位伪指令定位伪指令定位伪指令(ORG)(ORG)(ORG)(ORG)2.2.9 2.2.9 2.2.9 2.2.9 标号定义伪指令标号定义伪指令标号定义伪指令标号定义伪指令(LABEL)(LABEL)(LABEL)(LABEL)第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2.1 2.2.1 处理器选择伪指令处理器选择伪指令由于由于80 x8680 x86的所有处理器都支持的所有处理器都支持8086/80888086/8088指令系统,但每一种指令系统,但每一种高档的机型又都增加一些新的指令,因此,在编写程序时高档的机型又都增加一些新的指令,因此,在编写程序时要对所用处理器有一个明确的选择。此类伪指令格式为:要对所用处理器有一个明确的选择。此类伪指令格式为:80868086;选择;选择80868086指令系统指令系统 286286;选择;选择8028680286指令系统指令系统 286P286P;选择保护模式下;选择保护模式下8028680286指指令系统令系统 386386;选择;选择8038680386指令系统指令系统需要注意的问题:需要注意的问题:(1)(1)处理器选择伪指令在完整和简化两种程序框架中均可使处理器选择伪指令在完整和简化两种程序框架中均可使 用。用。(2)(2)缺省时为选择缺省时为选择8088/80868088/8086微处理器指令系统。微处理器指令系统。第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2.2 2.2.2 数据定义伪指令数据定义伪指令程序中所涉及到的大量初始数据、中间数据和结果数据,程序中所涉及到的大量初始数据、中间数据和结果数据,一般都要在程序设计时进行预置和分配存储空间,可以一般都要在程序设计时进行预置和分配存储空间,可以通过数据定义伪指令实现,其格式为:通过数据定义伪指令实现,其格式为:变量名变量名 DB DB 表达式表达式;定义字节型变量,每个操;定义字节型变量,每个操 作数占作数占1 1个字节的内存单元个字节的内存单元 变量名变量名 DW DW 表达式表达式;定义字型变量,每个操作;定义字型变量,每个操作 数占数占2 2个字节的内存单元个字节的内存单元 变量名变量名 DD DD 表达式表达式;定义双字型变量,每个操;定义双字型变量,每个操 作数占作数占4 4个字节的内存单元个字节的内存单元 第第2 2章章 汇编语言程序格式汇编语言程序格式 其中,其中,DBDB、DWDW、DDDD称为伪指令助记符,分别用来定义字称为伪指令助记符,分别用来定义字节型、字型、双字型变量。数据定义伪指令可用于除代节型、字型、双字型变量。数据定义伪指令可用于除代码段以外的任何段中,但主要用于数据段和附加数据段码段以外的任何段中,但主要用于数据段和附加数据段中,用来按名字存取其对应的内存单元。数据定义伪指中,用来按名字存取其对应的内存单元。数据定义伪指令可以为一个或连续的存储单元设置数值初值。其中变令可以为一个或连续的存储单元设置数值初值。其中变量名、助记符和操作数之间以空格隔开,且方括号中内量名、助记符和操作数之间以空格隔开,且方括号中内容为可选项。表达式可为如下几种情况:常数表达式、容为可选项。表达式可为如下几种情况:常数表达式、问号(?)、地址表达式(适用问号(?)、地址表达式(适用DWDW和和DDDD)、字符及字符)、字符及字符串(适用于串(适用于DBDB)、重复子句)、重复子句DUPDUP(表达式)、用逗号分开(表达式)、用逗号分开的上述各项。的上述各项。第第2 2章章 汇编语言程序格式汇编语言程序格式 需要说明的是:(1)若是字符串且是DB类型时,必须以单引号括起来,括起来的字符个数不能超过255个,字符串以ASCII码的形式按地址递增的顺序依次存放在以变量名开始的内存单元中;(2)若是?时,表示为变量预留内存单元。例如:X1 DB?;为变量X1预留1个字节单元;(3)若是带DUP的表达式表示定义多个相同的操作数和要预留多个内存单元。DUP的使用格式如下:表达式 DUP(操作数项)表达式为要重复的次数;操作数表示要重复的内容,可以是常数或表达式、字符串、?和带DUP的表达式。第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.192.19】操作数可以是常数,或者是表达式。操作数可以是常数,或者是表达式。DATA1 DB 12DATA1 DB 12,4 4,10H10H;每个操作数占用一个字节单元;每个操作数占用一个字节单元DATA2 DW 100DATA2 DW 100,100H100H,-5-5;每个操作数占用一个字单元;每个操作数占用一个字单元DATA3 DD 3*20DATA3 DD 3*20,0FFFDH0FFFDH;每个操作数占用一个双字单元;每个操作数占用一个双字单元汇编程序可以在汇编期间在存储器中存入数据,汇编程序可以在汇编期间在存储器中存入数据,如图如图2.12.1所示。所示。第第2 2章章 汇编语言程序格式汇编语言程序格式 图2.1 例2.19的汇编结果第第2 2章章 汇编语言程序格式汇编语言程序格式【例例2.202.20】操作数也可以是字符操作数也可以是字符串。下面串。下面3 3个定义语句是等价的。个定义语句是等价的。存储器存储情况如图存储器存储情况如图2.22.2所示。所示。STR1 DB STR1 DB ABCDABCD ;存放;存放地址由低到高分别为:地址由低到高分别为:41H41H、42H42H、43H43H、44H44HSTR1 DB STR1 DB A A,B B,C C,D DSTR1 DB 41HSTR1 DB 41H,42H42H,43H43H,44H 44H 图2.2 例2.20的汇编结果 第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2.3 2.2.3 模块命名和标题伪指令模块命名和标题伪指令1 1模块命名伪指令模块命名伪指令(NAME)(NAME)格式:格式:NAME NAME 模块名模块名该命令表示一个模块的开始,并给出该模块名。如果程该命令表示一个模块的开始,并给出该模块名。如果程序中没有使用序中没有使用NAMENAME伪指令,也可以使用伪指令,也可以使用TITLETITLE伪指令来给伪指令来给源程序设置标题,以后每页的第一行都列出该标题。源程序设置标题,以后每页的第一行都列出该标题。2 2标题伪指令标题伪指令(TITLE)(TITLE)格式:格式:TITLE TEXTTITLE TEXT这里这里TEXTTEXT为标题,即为不加引号的字符串,最长为为标题,即为不加引号的字符串,最长为6060个个字符。一个程序模块中只允许一个字符。一个程序模块中只允许一个TITLETITLE命令,否则会引命令,否则会引起误会。在无起误会。在无NAMENAME命令情况下,命令情况下,TEXTTEXT的前的前6 6个字符一般用个字符一般用作模块名。作模块名。第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2.4 2.2.4 程序结束伪指令程序结束伪指令(END)(END)格式:格式:END END 标号标号 其中:标号可以是过程名或带其中:标号可以是过程名或带“:”的标号,标号表示的标号,标号表示为程序开始执行的起始地址,即主程序中的第一条可执为程序开始执行的起始地址,即主程序中的第一条可执行指令的地址。当标号缺省时表示该程序是一个子程序,行指令的地址。当标号缺省时表示该程序是一个子程序,不能单独运行,只能被其他程序调用。不能单独运行,只能被其他程序调用。模块的一般形式为:模块的一般形式为:NAME NAME 模块名模块名 所有的语句所有的语句END END 启动标号或过程启动标号或过程 第第2 2章章 汇编语言程序格式汇编语言程序格式 2.2.5 2.2.5 完整段定义伪指令(完整段定义伪指令(SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME)80868086按照逻辑段组织程序,具有代码段、数据段、按照逻辑段组织程序,具有代码段、数据段、附加段和堆栈段。因此,一个汇编语言源程序可附加段和堆栈段。因此,一个汇编语言源程序可以包括若干个代码段、数据段或堆栈段,段与段以包括若干个代码段、数据段或堆栈段,段与段之间的顺序可以随意排列。逻辑段用汇编语言源之间的顺序可以随意排列。逻辑段用汇编语言源程序中的段定义伪指令来定义。程序中的段定义伪指令来定义。第第2 2章章 汇编语言程序格式汇编语言程序格式 1 1完整段定义伪指令(完整段定义伪指令(SEGMENTSEGMENT、ENDSENDS)采用完整段定义伪指令可具体控制汇编程序和连接程序采用完整段定义伪指令可具体控制汇编程序和连接程序在内存中组织代码和数据的方式。为此,需要用段定义在内存中组织代码和数据的方式。为此,需要用段定义伪操作,其格式如下:伪操作,其格式如下:段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别名类别名 段名段名 ENDSENDS第第2 2章章 汇编语言程序格式汇编语言程序格式 定义了一个以定义了一个以SEGMENTSEGMENT伪指令开始,以伪指令开始,以ENDSENDS伪指令结束的伪指令结束的存储段,二者总是成对出现,缺一不可。中间省略的部存储段,二者总是成对出现,缺一不可。中间省略的部分称为段体。对数据段、附加段、堆栈段来说,一般为分称为段体。对数据段、附加段、堆栈段来说,一般为变量、符号定义等伪指令;对代码段来说,则主要是程变量、符号定义等伪指令;对代码段来说,则主要是程序代码。方括号中的为可选项,当有可选项时各项顺序序代码。方括号中的为可选项,当有可选项时各项顺序不能错,可选项之间用空格隔开。下面分别介绍这些部不能错,可选项之间用空格隔开。下面分别介绍这些部分的作用。分的作用。(1)(1)段名段名段名是用户自定义的,但不要与指令助记符或伪指令重段名是用户自定义的,但不要与指令助记符或伪指令重名,用来指示汇编程序为该段分配的存储区的首地址,名,用来指示汇编程序为该段分配的存储区的首地址,它有段地址和偏移地址两个属性。段开始和段结束的段它有段地址和偏移地址两个属性。段开始和段结束的段名必须相同。名必须相同。第第2 2章章 汇编语言程序格式汇编语言程序格式(2)(2)定位类型定位类型说明段的起始地址的边界要求,指示连接程序按定位类说明段的起始地址的边界要求,指示连接程序按定位类型提出的要求,安排各段在内存的相互衔接方式。它型提出的要求,安排各段在内存的相互衔接方式。它有有5 5种可选择类型:种可选择类型:BYTEBYTE:段的起始地址可以从任何地址开始。:段的起始地址可以从任何地址开始。段起始地址段起始地址(20(20位位):B B WORD WORD:段的起始地址必须以偶地址开始,即该地:段的起始地址必须以偶地址开始,即该地 址的址的D0D0位应为位应为0 0。段起始地址段起始地址(20(20位位):0 B0 B第第2 2章章 汇编语言程序格式汇编语言程序格式 DWORDDWORD:段的起始地址必须为:段的起始地址必须为4 4的倍数,即该地址的的倍数,即该地址的D1D1和和D0D0位应为位应为0 0。段起始地址段起始地址(20(20位位):00 B00 B PARA PARA:段的起始地址必须从小段边界开始,即该地:段的起始地址必须从小段边界开始,即该地址的址的D3D3D0D0位应为位应为0 0。段起始地址段起始地址(20(20位位):0000 B 0000 BPAGEPAGE:段的起始地址必须从页的边界开始,即该地址:段的起始地址必须从页的边界开始,即该地址的的D7D7D0D0位应为位应为0 0。段起始地址段起始地址(20(20位位):0000 0000 B 0000 0000 B如未指定定位类型,则汇编程序默认为如未指定定位类型,则汇编程序默认为PARAPARA。第第2 2章章 汇编语言程序格式汇编语言程序格式(3)(3)组合类型组合类型当程序有多个段时,组合类型用来说明段与段之间是怎当程序有多个段时,组合类型用来说明段与段之间是怎样连接和定位的,共有样连接和定位的,共有6 6种组合类型:种组合类型:不指定或称隐含方式:表示本段与其他模块中的同不指定或称隐含方式:表示本段与其他模块中的同 名段无连接关系,它将作为一个独立的段运名段无连接关系,它将作为一个独立的段运行。行。PUBLIC PUBLIC:本段与其他模块中说明为:本段与其他模块中说明为PUBLICPUBLIC方式的方式的 同名段顺序连接,组成一个大的逻辑段,它同名段顺序连接,组成一个大的逻辑段,它们共用们共用 同一个段起始地址。同一个段起始地址。COMMON COMMON:本段与其他模块中说明为:本段与其他模块中说明为COMMONCOMMON方方 式的同名段从同一地址开始重叠连接,段长式的同名段从同一地址开始重叠连接,段长是同名是同名 段中最长的段的长度。段中最长的段的长度。第第2 2章章 汇编语言程序格式汇编语言程序格式 STACK STACK:表示该段是堆栈段的一部分。把所有相同:表示该段是堆栈段的一部分。把所有相同 类别名类别名的具有的具有STACKSTACK组合类型的段连接成组合类型的段连接成一个连一个连 续段,该段长度为各原有段的总和。将连续续段,该段长度为各原有段的总和。将连续段首地段首地 址送址送SSSS,段内最大偏移地址送,段内最大偏移地址送SPSP(SPSP指向栈指向栈顶)。顶)。当定义了当定义了STACKSTACK属性后,在主程序中可省略属性后,在主程序中可省略对对SSSS和和 SP SP的初始化。的初始化。MEMORYMEMORY:与:与PUBLICPUBLIC同义。同义。AT AT表达式:表示本段的段地址由表达式的值得到。表达式:表示本段的段地址由表达式的值得到。该段的偏移地址为该段的偏移地址为“零零”。这种方式用户可。这种方式用户可直接规定该直接规定该 段的起始地址。例如,段的起始地址。例如,AT 1000HAT 1000H,定位的段,定位的段首地址首地址 为(为(1000H1000H:0000H0000H),但这种方式不能用于),但这种方式不能用于代码段。代码段。第第2 2章章 汇编语言程序格式汇编语言程序格式(4)(4)类别名类别名类别名必须用单引号括起来。连接时对不同模块、不同类别名必须用单引号括起来。连接时对不同模块、不同名的程序段只要名的程序段只要类别名类别名相同,则放在一个连续的物相同,则放在一个连续的物理空间,但每段之间是独立的,不进行组合。理空间,但每段之间是独立的,不进行组合。第第2 2章章 汇编语言程序格式汇编语言程序格式 2 2指定段寄存器伪指令(指定段寄存器伪指令(ASSUMEASSUME)在程序中,必须明确段和段寄存器之间的关系,这可用在程序中,必须明确段和段寄存器之间的关系,这可用ASSUMEASSUME伪指令来实现,其格式为:伪指令来实现,其格式为:ASSUME ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:段名,段寄存器名:段名 ASSUMEASSUME伪指令告诉汇编程序,在运行期间通过哪个段寄伪指令告诉汇编程序,在运行期间通过哪个段寄存器才能找到所要的指令和数据。该指令放在程序的代存器才能找到所要的指令和数据。该指令放在程序的代码段中。码段中。如:如:ASSUME CSASSUME CS:CODECODE,ESES:EXTRAEXTRA,DSDS:DATADATA,SSSS:STACKSTACK第第2 2章章 汇编语言程序格式汇编语言程序格式 3 3段寄存器的装入段寄存器的装入 ASSUME ASSUME伪指令只是指出各段和段寄存器之间的伪指令只是指出各段和段寄存器之间的关系,但并未真正将段基地址装入相应的段寄存器中,关系,但并未真正将段基地址装入相应的段寄存器中,所以在程序的代码段开始处就应该先进行数据段所以在程序的代码段开始处就应该先进行数据段DSDS、附、附加段加段ESES和堆栈段和堆栈段SSSS的段基址的装入,否则无法正确对数的段基址的装入,否则无法正确对数据进行寻址操作。而代码段据进行寻址操作。而代码段CSCS则在加载程序后由系统自则在加载程序后由系统自动装入。动装入。DS DS和和ESES的装填方法可以使用相同的方法,直接的装填方法可以使用相同的方法,直接由用户程序进行加载。由用户程序进行加载。第第2 2章章 汇编语言程序格式汇编语言程序格式(1)DS(1)DS、ESES的装入的装入 MOV AX MOV AX,DATA DATA ;数据段段基地址送;数据段段基地址送AXAX寄存寄存器器 MOV DS MOV DS,AX AX ;AXAX寄存器的内容送数寄存器的内容送数据段寄据段寄存器存器DSDS或或 MOV AX MOV AX,SEG X SEG X ;变量;变量X X所在数据段的段基址所在数据段的段基址送送AXAX寄存器寄存器 MOV DS MOV DS,AXAX第第2 2章章 汇编语言程序格式汇编语言程序格式(2)CS(2)CS的装入的装入对对CSCS和和IPIP的装入方法是利用的装入方法是利用ENDEND后的标号来完成的。因为后的标号来完成的。因为该标号是可执行程序的起始地址。如:该标号是可执行程序的起始地址。如:STARTSTART:END STARTEND START系统自动将系统自动将STARTSTART所在段的段地址送所在段的段地址送CSCS寄存器,将寄存器,将STARTSTART所在段内的偏移地址送所在段内的偏移地址送IPIP寄存器。寄存器。第第2 2章章 汇编语言程序格式汇编语言程序格式(3)SS(3)SS的装入的装入方法方法1 1:堆栈段:堆栈段
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!