收藏 分销(赏)

汇编语言入门教程--汇编语言程序结构.pptx

上传人:丰**** 文档编号:4224633 上传时间:2024-08-26 格式:PPTX 页数:64 大小:585.85KB
下载 相关 举报
汇编语言入门教程--汇编语言程序结构.pptx_第1页
第1页 / 共64页
汇编语言入门教程--汇编语言程序结构.pptx_第2页
第2页 / 共64页
汇编语言入门教程--汇编语言程序结构.pptx_第3页
第3页 / 共64页
汇编语言入门教程--汇编语言程序结构.pptx_第4页
第4页 / 共64页
汇编语言入门教程--汇编语言程序结构.pptx_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、教学重点本章重点掌握:程序的格式、开发方法参数的表达、变量的定义变量和标号的属性第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构第一章第一章基础知识基础知识机器语言计算机能够直接识别并执行的二进制机器指令序列优点:开销小、运行速度快;缺点:难以编写和理解,编程效率很低。汇编语言(Assembly Language)用助记符号表示机器指令代码、变量地址,标号等的符号指令序列。优点:易记、易理解,易编写程序,大大提高了编程效率;问题:需要将助记符号翻译为机器语言。汇编语言源程序:用汇编语言编写的程序。汇编程序:将助记符号翻译为机器语言的语言处理程序,以便 计算机能够识别。汇

2、编:将助记符号翻译为机器语言的过程。理解以上几个名词概念:汇编语言、汇编语言源程序、汇编程序、汇编概概念念第一节:汇编程序功能及上机过程 汇编程序功能 汇编程序的主要功能如下:(1)检测语法错 显示错误信息(2)源程序文件 二进制目标文件(并输出*.LST文件)(3)展开宏指令一般汇编程序都应具有如下功能:宏汇编功能 支持地址和数据的符号表示 支持内存管理 支持程序的模块化组织 支持多种类型的数据表示等 汇编程序依赖于硬件,不同机型的系统有自己的汇编程序。上机过程 上机过程如图所示第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构汇编语言源程序的结构与书写格式汇编语言源程

3、序是段结构的:代码段、数据段、堆栈段、附加段 源程序由段组成,每段有一个段名,segment定义段起点,ends定义段结束点。每段由若干语句行组成,源程序以end结束。例字符串传送指令和伪指令指令指令使CPU产生动作、并在程序执行时才处理的语句,就是前一章学习的处理器指令伪指令伪指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等伪指令与具体的处理器类型无关,但与汇编程序的版本有关 本课程采用微软宏汇编程序本课程采用微软宏汇编程序 MASM 5.0MASM 5.0汇编语言语句一般格式为:标识符/语句标号 指令名 操作数序列 ;注释 标

4、识符用来为变量、段及过程等命名 语句标号标识符后加:,提供转移地址指令名指令可分为三类:机器指令、伪指令和宏指令。机器指令:指令系统中的指令,程序运行时由CPU执行;伪指令:汇编程序执行的操作,规定汇编程序如何按要求进行汇编及分配内存。宏指令:由一系列指令或伪指令构成,汇编时展开成若干条机器指令,用于提高编程效率。操作数序列可以是常量、变量、表达式、寄存器名或标号等,用逗号隔开。(伪指令和宏指令由汇编程序在汇编期间处理伪指令和宏指令由汇编程序在汇编期间处理)注释符“;”后可给出语句注释,提高可读性和可理解性。第二节:汇编语言语句格式与分类第二节:汇编语言语句格式与分类(1)常量 0011011

5、0B 389D 467O B407H 3.475E+5 Input a number(2)变量 变量名:存储单元的符号地址 变量值:存储单元中的数据MOV AL,Amov al,a变量的三种属性:段值(SEG):变量所在段的起始地址 偏移量(OFFSET):段起点距离变量所在存储单 元位置的字节数50偏移量段起点类型(TYPE):变量占用的字节数常量、变量、标号常量、变量、标号(3)标号 标号:存放指令的存储单元的符号地址,常用作转移地址。NEAR :2字节转移地址 CMP AX,BX JNE NEXT NEXT:MOV AX,0 标号的三种属性:段值(SEG):标号所在段的起始地址 偏移量(

6、OFFSET):段起点距离标号所指存储单 元位置的字节数 类型(TYPE):NEAR,FAR(偏移地址)短指针(近指针)段内转移FAR:4字节转移地址(段、偏移地址)长指针(远指针)段间转移第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构汇编语言程序的语句类型:汇编语言程序的语句类型:1、程序执行指令语句。、程序执行指令语句。2、伪操作语句。、伪操作语句。3、宏指令语句。、宏指令语句。伪操作的功能:伪操作的功能:伪操作又称为伪指令,它不象机器指令那样是在程序运行期间由伪操作又称为伪指令,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由

7、汇编程序处理的操作,它计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如下功能:们可以完成如下功能:(1 1)符号定义伪指令)符号定义伪指令 (2 2)数据定义伪指令)数据定义伪指令 (3 3)段定义伪指令)段定义伪指令 (4 4)过程定义伪指令过程定义伪指令 (5 5)条件汇编伪指令)条件汇编伪指令 (6 6)宏指令)宏指令 (7 7)结构与记录)结构与记录 一、一、数据定义及存储器分配伪操作数据定义及存储器分配伪操作格式:Variable Mnemonic Operand,Operand ;Comments 变变量量(Variable)字字段段:是是可可有有

8、可可无无的的,它它用用符符号号地地址址表表示示,其其作作用用与与指指令令语语句句前前的的标标号号相相同同,但但它它的的后后面面不不跟跟冒冒号号。如如果果语语句句中中有有变变量量则则汇汇编编程程序序使使其其记记以以第第一个字节的偏移地址。一个字节的偏移地址。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构注释(Comments)字段:用来说明该伪操作的功能,它也是可有可无的。助记符(Mnemonic)字段:说明所用伪操作的助记符,常用的有以下几种:DB伪操作:伪操作:用来定义字节,其后的每个操作数都占有一个字节。用来定义字节,其后的每个操作数都占有一个字节。DW的的操操作

9、作:用用来来定定义义字字,其其后后的的每每个个操操作作数数占占有有一一个个字字(低低位位字字节节在第一个字节地址中,在第一个字节地址中,高位字节在第二个字节地址中高位字节在第二个字节地址中)。DD伪操作:伪操作:用来定义双字,其后的每个操作数占有二个字。用来定义双字,其后的每个操作数占有二个字。DQ伪操作:伪操作:用来定义四个字,其后的每个操作数占有四个字。用来定义四个字,其后的每个操作数占有四个字。DT伪伪操操作作:用用来来定定义义十十个个字字节节,其其后后的的每每个个操操作作数数占占有有十十个个字字节节,形成压缩的形成压缩的BCD码。码。这些伪操作可以把其后面跟着的数据存入指定的存储单元,

10、或者只分配存储器空这些伪操作可以把其后面跟着的数据存入指定的存储单元,或者只分配存储器空间而并不存入确定的数值。间而并不存入确定的数值。DW和和DD伪操作可以存储偏移地址或完整的地址伪操作可以存储偏移地址或完整的地址。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构例例操操作作数数可可以以是是常常数数,或或者者是是表表达达式式(根根据该表达式可以求得一个常数据该表达式可以求得一个常数),如,如DATA_BYTEDB10,4,l0HDATA_WORDDW100,100H,-5DATADWDD3*20,0FFFDH汇编程序可以在汇编期间在存储器中存入汇编程序可以在汇编期间在

11、存储器中存入数据,如右图所示。数据,如右图所示。例例操作数也可以是字符串,如:操作数也可以是字符串,如:MESSAGE DB MESSAGE DB H2LLOH2LLO则存储器存储情况如下图所示:则存储器存储情况如下图所示:第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构注意:注意:DBAB和和DWAB的存储的存储分配空间的不同。如下图:分配空间的不同。如下图:例例操操作作数数?可可以以保保留留存存储储空空间间,但但不不存存入数据。入数据。如:如:ABCDB0,?,?,?,0DFFDW?,52,?经汇编后的存储情况如右图所示。经汇编后的存储情况如右图所示。第一章第一章基

12、础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构操作数字段还可以使用复制操作符来复制某个(或某些)操作数。其格式为操作数字段还可以使用复制操作符来复制某个(或某些)操作数。其格式为:repeat_countDUP(operate,operate,)其中其中repeat_count可以是一个表达式,可以是一个表达式,它的值应该是一个正整数,用来指定括号它的值应该是一个正整数,用来指定括号中的操作数的重复次数。中的操作数的重复次数。例例ARRAYlDB2DUP(0,1,2,?,?)ARRAY2DB100DUP(?)汇编后的存储情况如下图所示。汇编后的存储情况如下图所示。ARRAYlDB2

13、DUP(0,1,2,?,?)和以下语句是等价的:和以下语句是等价的:ARRAYlDB0,I,2,?,0,1,2,?第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构例例DUP操作可以嵌套,例如操作可以嵌套,例如ARRAY3DB100DUP(0,2DUP(1,2),0,3)则汇编结果如右图所示:则汇编结果如右图所示:可以用可以用DW或或DD伪操作把变量或标号的偏移地址伪操作把变量或标号的偏移地址(DW)或整个地址或整个地址(DD)存入存储器。用存入存储器。用DD伪操作存入伪操作存入地址时,第一个字为偏移地址,第二个字为段地址。地址时,第一个字为偏移地址,第二个字为段地址。例

14、如例如PARAMETER_TABLEDWPAR1DWPAR2DWPAR3INTERSEG_DATADDDATA1DDDATA2则汇编后的存储情况如下图所示。其中偏移地址或段地址则汇编后的存储情况如下图所示。其中偏移地址或段地址均占有一个宇,其低位字节占有第一个字节,高位字节占均占有一个宇,其低位字节占有第一个字节,高位字节占有第二个字节。有第二个字节。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构顺便说明一下,这里操作数字段中的变量或标号可以使用表达式如顺便说明一下,这里操作数字段中的变量或标号可

15、以使用表达式如:在这种情况下,汇编后,存储器中应该存入表达式的值。在这种情况下,汇编后,存储器中应该存入表达式的值。例如例如PARAMETER_TABLEDWPAR1+1DWPAR2+1说明变量的类型属性问题说明变量的类型属性问题:在在数数据据定定义义伪伪操操作作前前面面的的变变量量的的值值是是该该伪伪操操作作中中的的第第一一个个数数据据项项在在当当前前段段内内的的第第一一个个字字节节的的偏偏移移地地址址。此此外外,它它还还有有一一个个类类型型属属性性用用来来表表示示该该语语句句中中的的每每一一个个数数据据项项的的长长度度(以以字字节节为为单单位位表表示示),因因此此DB伪伪操操作作的的类类型

16、型属属性性为为1,DW为为2,DD为为4,DQ为为8,DT则为则为10,变量表达式的属性和变量是相同的。,变量表达式的属性和变量是相同的。汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节指令。指令。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构例如例如OPER1DB?,?,?OPER2DW?,?,?MOV OPER1,0 MOV OPER1,0 MOV OPER2,0 MOV OPER2,0 则第一条指令应为字节指令,第则第一条指令应为字节指令,第二条指令则应为字指令。二条指令则应为字指令。如

17、果有下列指令序列如果有下列指令序列:OPER1DB1,2OPER2DW1234H,2345HMOVAX,OPER1+1MOVAL,OPER2 汇编程序在汇编这一段程序时,能发汇编程序在汇编这一段程序时,能发现两条现两条MOV指令的两个操作数的类型属性指令的两个操作数的类型属性是不相同的:是不相同的:OPERl十十1为字节类型属性而为字节类型属性而AX为字为字类型属性;类型属性;OPER2为字类型属性而为字类型属性而AL为字节类为字节类型属性。型属性。汇编语言将指示由于属性类型不匹配出错。汇编语言将指示由于属性类型不匹配出错。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结

18、构有有一一个个办办法法可可以以指指定定操操作作数数的的类类型型属属性性,它它优优先先于于隐隐含含的的类类型型属属性性,即即可可以以使使用用PTR属性操作符属性操作符。其格式为:。其格式为:typePTRVarible士士constantexpression其其 中中 类类 型型 可可 以以 是是 BYTE,WORD或或DWORD(双双字字),这这样样变变量量的的类类型型就就可可以以指定了。上面例子可以写为:指定了。上面例子可以写为:OPER1DB1,2OPER2DW1234H,2345HMOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2通通过过PTR属属性性操操作作符

19、符就就把把OPER1十十1的的类类型型属属性性指指定定为为字字,两两个个操操作作数数的的属属性性就就一一致致了了,汇汇编编时时不不会会出出错错,而而运运行行时时应应把把OPER1十十1的的字字内内容容送送到到AX,即即把把OPER1十十1的的内内容容送送AL,把把OPER2的的第第一一个个字字节节的的内内容容运运AH,所所以以指指令令执执行行完完后后,(AX)3402H。同样,对于第二条语句(同样,对于第二条语句(AL)=34H第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构LABEL伪操作伪操作:除了用属性操作符给以定义外,还可以用除了用属性操作符给以定义外,还可以用

20、LABEL伪操作来定义,其格式为:伪操作来定义,其格式为:nameLABELtype(1)对于数据项可以表示为:对于数据项可以表示为:variable_nameLABELtype其中,其中,type可以是可以是BYTE,WORD或或DWORD(双字双字)。(2)对于可执行的代码,则可表示为)对于可执行的代码,则可表示为label_nameLABELtype其中,其中,type可以是可以是NEAR或或FAR。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构例如例如4.9BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)这这样样在在100个个字字

21、节节数数组组中中的的第第一一个个字字节节的的地地址址赋赋于于二二个个不不同同类类型型的的变变量量名名:字节类型的变量字节类型的变量BYTE_ARRAY和字类型变量和字类型变量WORD_ARRAY。指令指令MOVWORD_ARRAY十十2.,0把该数组的第把该数组的第3个和第个和第4个字节置个字节置0,而,而MOVBYTE_ARRAY十十2.,0则把该数组的第则把该数组的第3个字节置个字节置0。例:例:LABF LABEL FARLABF LABEL FAR LAB LAB:MOV AXMOV AX,100 100 第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构二、表达

22、式赋值伪操作二、表达式赋值伪操作EQU 有时程序中多次出现同一个表达式为方便起见可以用赋值伪操作给表达式有时程序中多次出现同一个表达式为方便起见可以用赋值伪操作给表达式赋予一个名字,其格式如下:赋予一个名字,其格式如下:此后,程序中凡需要用到该表达式之处就可以用表达式名来代替了。此后,程序中凡需要用到该表达式之处就可以用表达式名来代替了。上式中的表达式上式中的表达式可以是任何有效的操作数格式可以是任何有效的操作数格式,可以是任何可以求出常数值的表可以是任何可以求出常数值的表达式,也可以是任何有效的助记符。达式,也可以是任何有效的助记符。举例如下:举例如下:第一章第一章基础知识基础知识第五章第五

23、章汇编语言程序结构汇编语言程序结构必须注意必须注意EQU语句的表达式中如果有变量或标号的表达式,则在该语句前应该先语句的表达式中如果有变量或标号的表达式,则在该语句前应该先给出它们的定义。给出它们的定义。例如,语句例如,语句:则必须放在则必须放在DATA_ONE的定义之后才行,否则汇编程序将指示出错。的定义之后才行,否则汇编程序将指示出错。另另外外还还有有一一个个与与EQU相相类类似似的的=伪伪操操作作也也可可以以作作为为赋赋值值伪伪操操作作使使用用。它它们们之之间间的的区区别别是是:EQU伪伪操操作作中中的的表表达达式式名名是是不不允允许许重重复复定定义义的的,而而=伪伪操操作作则则允允许许

24、重复定义。重复定义。例如:例如:EMP=6或或EMPEQU6都可以使数都可以使数6赋以符号名赋以符号名EMP,但是不允许两,但是不允许两者同时使用。者同时使用。第一个语句后的指令中第一个语句后的指令中EMP值为值为7;而第二个语句后的指令中;而第二个语句后的指令中EMP值为值为8。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构三、段定义伪操作三、段定义伪操作存存储储器器的的物物理理地地址址是是由由段段地地址址和和偏偏移移地地址址组组合合而而成成的的,汇汇编编程程序序在在把把源源程程序序转转换换为为目目标标程程序序时时,必必须须确确定定标标号号和和变变量量的的偏偏移移地

25、地址址,并并且且需需要要把把有有关关信信息息通通过过目目标标模模块块传传送送给给连连接接程程序序,以以便便连连接接程程序序把把不不同同的的段段和和模模块块连连接接在在一一起起形形成一个可执行程序。为此,需要用段定义伪操作,成一个可执行程序。为此,需要用段定义伪操作,段定义伪操作的格式如下段定义伪操作的格式如下:此外,还要明确段和段寄存器的关系,这可用此外,还要明确段和段寄存器的关系,这可用ASSUME伪操作来实现,其格式为:伪操作来实现,其格式为:其中其中assignment说明分配情况,其格式为:说明分配情况,其格式为:其中段寄存器名必须是其中段寄存器名必须是CS、DS、ES和和SS中的一个

26、,而段名则必须是由中的一个,而段名则必须是由segment定义的段中的段名。定义的段中的段名。而而ASSUMENOTHING则可取消前面由则可取消前面由ASSUME所指定的段寄存器。所指定的段寄存器。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构例如:例如:由由于于assume伪伪操操作作只只是是指指定定某某个个段段分分配配给给那那一一个个段段寄寄存存器器,它它并并不不能能把把段段地地址址装装入入段段寄寄存存器器中中,所所以以在在代代码码段段中中。还还必必须须把把段段地地址址装装入入相相应应的的段段寄寄存存器器中中。为为此此,在在上上例例的的程程序序中中,分分别别用用

27、两两条条MOV指指令令完完成成这这一一操操作作。如如果果程程序序中中有有堆堆栈栈段段,也也需需要要把把段段地地址址装装入入SS中中。但但是是,代代码码段段不不需需要要这这样样做做,代代码码段段的的这这一一操操作在程序初始化时完成。作在程序初始化时完成。功能:功能:通知MASM用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系在明确了程序中各段与段寄存器之间的关系后,汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是ASSUME伪指令的主要功能ASSUME伪指令并不为段寄存器设定初值,连接程序LINK将正确设置CS:IP和SS:SP由于数据段通常都需要,所以在样板源程

28、序中,首先为DS赋值;如果使用附加段,还要赋值ES段寄存器的装入DS和ES的装入通过寄存器传送如:MOV AX,DATA1 MOV DS,AX MOV AX,DATA2 MOV ES,AXSS的装入(1)自动装入采用定义段时指定组合类型STACK参数,在ASSUME语句中建立SS的关系,这样就可以自动装入SS。SS段寄存器的装入stack1segment para stackdw 40h dup(?)stack1ends code1segmentassume cs:code1,ss:stack1,SS段寄存器的装入(2)程序设置stack1segment para stackdw 40h du

29、p(?)toplabelwordstack1ends code1segmentassume cs:code1,ss:stack1,mov ax,stack1mov ss,axmov sp,offset top CS和IP的装入(1)初始化时装入,根据END伪指令指示的地址 END 标号END语句的作用:告诉汇编程序,源程序结束指定程序运行时的起始地址,即:seg 标号 csoffset 标号 ip汇编结束伪指令END 标号指示汇编程序MASM到此结束汇编过程源程序的最后必须有一条END语句可选的标号用于指定程序开始执行点,连接程序将据此设置CS:IP值 不要糊涂程序终止和汇编结束是两码事CS和

30、IP的装入(2)自动修改CS和IP执行CALL FAR和RET指令执行JMP FAR指令响应中断及中断返回(IRET)RESET 第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构SEGMENT伪操作还可以增加类型及属性的说明,格式如下伪操作还可以增加类型及属性的说明,格式如下:一般情况下,这些说明可以不用。但是,如果需要用连接程序把本程序与其他程一般情况下,这些说明可以不用。但是,如果需要用连接程序把本程序与其他程序模块相连接时,就需要使用这些说明。分别叙述如下:序模块相连接时,就需要使用这些说明。分别叙述如下:*定位类型定位类型(align_type)可以是可以是:段

31、名段名SEGMENT定位类型定位类型组合类型组合类型段字段字类别名类别名 段名段名ENDS实际上定位类型可以理解为实际上定位类型可以理解为对两个相临段的段地址给予的一些规定对两个相临段的段地址给予的一些规定。定位类型可以。定位类型可以有以下几种:有以下几种:PARA:指定所定义的段开始于小段边界,实际是规定这个段的起始地址与前面:指定所定义的段开始于小段边界,实际是规定这个段的起始地址与前面一个段的起始地址之差必须是一个段的起始地址之差必须是16字节的整数倍。这意味着相临两个段的段地址之差最字节的整数倍。这意味着相临两个段的段地址之差最小也得是小也得是1。PAGE:指定定义的段开始于页边界,实

32、际是规定这个段的起始地址与前面一个:指定定义的段开始于页边界,实际是规定这个段的起始地址与前面一个段的起始地址之差必须是段的起始地址之差必须是256字节的整数倍。字节的整数倍。BYTE:所定义的段开始于字节边界,实际上是指这个段可以从任何地址开始。:所定义的段开始于字节边界,实际上是指这个段可以从任何地址开始。WORD:所定义的段开始于字边界,实际是指这个段只能从偶数地址开始。:所定义的段开始于字边界,实际是指这个段只能从偶数地址开始。如果源程序中指定了段的定位类型为如果源程序中指定了段的定位类型为PARA或或PAGE,那么获得的可执行文件,那么获得的可执行文件中相临段的段地址就有差异。中相临

33、段的段地址就有差异。但是如果源程序中指定了段的定位类型是但是如果源程序中指定了段的定位类型是BYTE或或WORD,那么在可执行文件,那么在可执行文件中相临段的段地址就有可能相同。中相临段的段地址就有可能相同。为了说明这个问题,我们下面给出了一个程序例:为了说明这个问题,我们下面给出了一个程序例:第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构*组合类型组合类型(combine_type)设置一定的组合类型就可以通知设置一定的组合类型就可以通知LINK程序把一些分散在不程序把一些分散在不同模块内的同类型段组织在一个段内,这样可以使最终形成的可执行文件结构比较清晰。同模块内

34、的同类型段组织在一个段内,这样可以使最终形成的可执行文件结构比较清晰。PUBLIC该该段段连连接接时时将将与与有有相相同同名名字字的的其其他他分分段段连连接接在在一一起起。其其连连接接次次序序由由连连接接命令指定。命令指定。COMMON该该段段在在连连接接时时与与其其他他同同名名分分段段有有相相同同的的起起始始地地址址,所所以以会会产产生生覆覆盖盖。COMMON的连接长度是各分段中的最大长度。的连接长度是各分段中的最大长度。ATexpression使使段段的的起起始始地地址址是是表表达达式式所所计计算算出出来来的的16位位段段地地址址。但但它它不不能能用用来指定代码段。来指定代码段。STOCK

35、指定该段在运行时为堆栈段的部分。指定该段在运行时为堆栈段的部分。MEMORY指定该段将分配在所有其他连接在一起的段的前面指定该段将分配在所有其他连接在一起的段的前面(在高地址上在高地址上),如,如果连接时有几个指定果连接时有几个指定MEMORY的段,则遇到的第一段作为的段,则遇到的第一段作为MEMORY段,其他段,其他则作为则作为COMMON段段*类别类别(CLASS)连接时用于组成段组的名字:连接时用于组成段组的名字:可以是:可以是:第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构四、程序开始和结束伪操作四、程序开始和结束伪操作 (ASM(ASM操作规则操作规则)在程

36、序的开始可以用在程序的开始可以用NAME或或TITLE为模块取名字,为模块取名字,NAME的格式是:的格式是:NAMEmodule_name汇汇编编程程序序将将以以给给出出的的module_name作作为为模模块块的的名名字字。如如果果程程序序中中没没有有NAME伪伪操操作,则也可使用作,则也可使用TITLE伪操作,其格式为;伪操作,其格式为;TITLEtextTITLE伪操作可指定每一页上打印的标题。同时,如果程序中没有使用伪操作可指定每一页上打印的标题。同时,如果程序中没有使用NAME伪操作则程序将用伪操作则程序将用text中的前六个字符作为模块名。中的前六个字符作为模块名。text最多可

37、有最多可有60个字符。个字符。如如果程序中既无果程序中既无NAME又无又无TITLE伪操作,则将用源文件名作为模块名伪操作,则将用源文件名作为模块名。所以。所以NAME及及TILLE伪操作并不是必要的,伪操作并不是必要的,表示源程序结束的伪操作的格式为表示源程序结束的伪操作的格式为:其中标号指示程序开始执行的起始地址。其中标号指示程序开始执行的起始地址。如果多个程序模块相连接,则只有主程如果多个程序模块相连接,则只有主程序要使用标号,其它子程序模块则只用序要使用标号,其它子程序模块则只用END而不必指定标号。而不必指定标号。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结

38、构五、对准伪操作五、对准伪操作*EVEN的操作的操作:使下一个字节地址成为偶数。一个字的地址最好从偶地址开始,所以对于使下一个字节地址成为偶数。一个字的地址最好从偶地址开始,所以对于字数组为保证其从偶地址开始,可以在它前面用字数组为保证其从偶地址开始,可以在它前面用EVEN伪操作来达到这一目的。伪操作来达到这一目的。例如:例如:*ORG Constant expression*ORG Constant expression 如常数表达式的值为如常数表达式的值为n,则,则ORG伪操作可以使下一个字节的地址成为常数表达式伪操作可以使下一个字节的地址成为常数表达式的值的值n。例。例 :第一章第一章基

39、础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构则则VECT1的偏移地址值为的偏移地址值为0AH,而,而VECT2的偏移地址值为的偏移地址值为14H。在在汇汇编编程程序序对对源源程程序序汇汇编编的的过过程程中中,使使用用地地址址计计数数器器来来保保存存当当前前正正在在汇汇编编的的指指令令的的地地址址。地地址址计计数数器器的的值值可可用用$来来表表示示,汇汇编编语语言言允允许许用用户户直直接接用用$来来引引用用地地址址计数器的值,因此计数器的值,因此ORG$+8可以表示跳过可以表示跳过8个字节的存储区。个字节的存储区。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序

40、结构在指令和伪操作中在指令和伪操作中也可以直接用也可以直接用$来表示地址计数器的值,如来表示地址计数器的值,如JNE$+6则转向地址是则转向地址是JNE指令的首地址加上指令的首地址加上6。在这里,。在这里,$十十6必须是另一条指令的首地必须是另一条指令的首地址,否则,汇编程序指示出错信息。址,否则,汇编程序指示出错信息。当当$用在伪操作的参数字段时用在伪操作的参数字段时,则和用在指,则和用在指令中的情况不同,它表示的是令中的情况不同,它表示的是地址计数器的当前值地址计数器的当前值。如如汇汇编编时时ARRAY分分配配的的偏偏移移地地址址为为0074H,则则汇汇编编后后的的存存储储区区将将如如右右

41、图图所所示示。应应该该注注意意,ARRAY数数组组中中的的两两个个十十4得得到到的的结结果果是是不不同同的的,这这是是由由于于$的的值值是是在在不不断断变变化化的的缘缘故故。当当在在指指令令中中用用到到$时时,它它只只代代表表该该指指令令的的首首地地址址,而而与与$本本身所在的字节无关。身所在的字节无关。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构六、基数控制伪操作六、基数控制伪操作 汇编程序默认的是十进制数,为此,当使用其他基数表示的常数时,需要专汇编程序默认的是十进制数,为此,当使用其他基数表示的常数时,需要专门给以标记如下:门给以标记如下:l l二进制:后面跟

42、字母二进制:后面跟字母Bl l十进制:默认,后面也可以跟字母十进制:默认,后面也可以跟字母Dl l十十六六进进制制:后后面面跟跟字字母母H,如如果果第第一一个个字字母母是是A-F时时,应应在在其其前前面面加加上数字上数字0l l八进制:后面跟八进制:后面跟O或或Q。RADIX伪操作,可以把伪操作,可以把默认的基数默认的基数改变为改变为216范围内的任何基数。格式如下:范围内的任何基数。格式如下:RADIXexpression 字符串可以看成串常数,可以用单引号或双引号把字符串放在其中,得到的字符串可以看成串常数,可以用单引号或双引号把字符串放在其中,得到的是字符串的是字符串的ASC码值,例如码

43、值,例如ABCD。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构第三节:汇编语言程序格式第三节:汇编语言程序格式汇编语言源程序中的每个语句可以由四项组成,格式如下:汇编语言源程序中的每个语句可以由四项组成,格式如下:其中:其中:名字项是名字项是个符号。个符号。操作项是一个操作码的助记符,它可以是指令、伪操作或宏指令名。操作项是一个操作码的助记符,它可以是指令、伪操作或宏指令名。操操作作数数项项由由一一个个或或多多个个表表达达式式组组成成,它它提提供供为为执执行行所所要要求求的的操操作作而而需需要要的的信息。信息。注释项用来说明程序或语句的功能。为识别注释项的开始。也可

44、以从一行注释项用来说明程序或语句的功能。为识别注释项的开始。也可以从一行的第一个字节开始,此时整行都是注释,常用来说明下面一段程序的功能。的第一个字节开始,此时整行都是注释,常用来说明下面一段程序的功能。一一名字项名字项源程序中用下列字符来表示名字源程序中用下列字符来表示名字字母字母AZ数字数字09专用字符专用字符?、一、一、$第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构注意:(注意:(1)除数字外,所有字符都可以放在源语句的第一个位置。)除数字外,所有字符都可以放在源语句的第一个位置。(2)名字中如果用到)名字中如果用到则必须是第一个字符。则必须是第一个字符。(3

45、)可以用很多字符来说明名字,但只有前面的)可以用很多字符来说明名字,但只有前面的31个字符能被汇编程序所识别。个字符能被汇编程序所识别。用途:名字项可以是标号或变量。它们都用来表示本语句的符号地址,它是可有用途:名字项可以是标号或变量。它们都用来表示本语句的符号地址,它是可有可无的,只有当需要用符号地址来访问该语句时它才需要出现。可无的,只有当需要用符号地址来访问该语句时它才需要出现。标标号号:标标号号在在代代码码段段中中定定义义,后后面面跟跟冒冒号号:,它它也也可可以以用用LABEL或或EQU伪伪操操作作来来定定义义。此此外外它它还还可可以以作作为为过过程程名名定定义义。标标号号经经常常在在

46、转转移移指指令令或或CALL指指令令的的操操作数字段出现,用以表示转向地址。作数字段出现,用以表示转向地址。标号有三种属性;段、偏移及类型。标号有三种属性;段、偏移及类型。段段属属性性:定定义义标标号号的的段段起起始始地地址址,此此值值必必须须在在一一个个段段寄寄存存器器中中。而而标标号号的的段段则则总总是在是在CS寄存器中。寄存器中。偏偏移移属属性性:标标号号的的偏偏移移地地址址是是16位位无无符符号号数数,它它代代表表从从段段起起始始地地址址到到定定义义标标号号的的位置之间的字节数。位置之间的字节数。类型属性:类型属性:用用来指出该标号是在本段内引用还是在其它段中引用的。如在段内来指出该标

47、号是在本段内引用还是在其它段中引用的。如在段内引用的,则称为引用的,则称为NEAR,指针长度为,指针长度为2字节:如在段外引用,则称为字节:如在段外引用,则称为FAR,指针,指针长度为长度为4字节。字节。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构变量:变量:变量在除代码段以外的其他段中定义,后面不跟冒号。它也可以用变量在除代码段以外的其他段中定义,后面不跟冒号。它也可以用LABEL或或EQU伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及类型三种属性。类型三种属性。段属性:段属性:定义变量的段起始地址

48、,此值必须在一个段寄存器中。定义变量的段起始地址,此值必须在一个段寄存器中。偏偏移移属属性性;变变量量的的偏偏移移地地址址是是16位位无无符符号号数数,它它代代表表从从段段的的起起始始地地址址到到定定义义变变量量的的位位置置之之间间的的字字节节数数。在在当当前前段段内内给给出出变变量量的的偏偏移移值值等等于于当当前前地地址址计计数数器器的的值值,当前地址计数器的值可以用当前地址计数器的值可以用$来表示。来表示。类类型型属属性性;变变量量的的类类型型属属性性定定义义该该变变量量所所保保留留的的字字节节数数。如如BYTE(1个个字字节节长长)、WORD(2个个字字节节长长)、DWORD(4个个字字

49、节节长长)、DQ(8个个字字节节长长)、DT(10个个字字节节长长),这一点在数据定义伪操作中已作了说明。,这一点在数据定义伪操作中已作了说明。在程序中同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。在程序中同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。二、操作项二、操作项 操作项可以是指令、伪操作或宏指令的助记符。对于指令,汇编程序将其翻操作项可以是指令、伪操作或宏指令的助记符。对于指令,汇编程序将其翻译为机器语言指令。对于伪操作汇编程序将根据其所要求的功能进行处理。对译为机器语言指令。对于伪操作汇编程序将根据其所要求的功能进行处理。对于宏指令,则将根据其定义展

50、开。这在以后中将专门论述。于宏指令,则将根据其定义展开。这在以后中将专门论述。第一章第一章基础知识基础知识第五章第五章汇编语言程序结构汇编语言程序结构三、操作数项三、操作数项 操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。对操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。对于指令,操作数项一般给出操作数地址,它们可能有一个或二个或一个也没有。于指令,操作数项一般给出操作数地址,它们可能有一个或二个或一个也没有。对于伪操作或宏指令则给出它们所要求的参数。对于伪操作或宏指令则给出它们所要求的参数。操作数项可以是常数、寄存器、标号、变量或由表达式组成。操作数项可以是

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服