-第5章 汇编语言程序设计.ppt

上传人:qwe****56 文档编号:70105315 上传时间:2023-01-16 格式:PPT 页数:90 大小:890.50KB
返回 下载 相关 举报
-第5章 汇编语言程序设计.ppt_第1页
第1页 / 共90页
-第5章 汇编语言程序设计.ppt_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《-第5章 汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《-第5章 汇编语言程序设计.ppt(90页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第5 5章章 汇编语言程序设计汇编语言程序设计内容提要:本章介绍了汇编语言基本语法,内容提要:本章介绍了汇编语言基本语法,汇编语言程序的实现,汇编语言程序设计汇编语言程序的实现,汇编语言程序设计方法及应用,并通过程序设计举例说明了方法及应用,并通过程序设计举例说明了顺序结构程序设计;分支结构程序设计;顺序结构程序设计;分支结构程序设计;循环结构程序设计;子程序设计以及宏的循环结构程序设计;子程序设计以及宏的定义和调用。定义和调用。学习要求:熟练掌握学习要求:熟练掌握8086/8088微处理器微处理器汇编语言程序设计的方法及应汇编语言程序设计的方法及应返回主目录返回主目录通过前面的学习我们知道

2、,计算机之所以能通过前面的学习我们知道,计算机之所以能够自动地工作,是因为计算机能按照程序的够自动地工作,是因为计算机能按照程序的安排执行相应的指令,编写这些程序的语言安排执行相应的指令,编写这些程序的语言就称为计算机语言。计算机语言按照人类的就称为计算机语言。计算机语言按照人类的语言习惯通常分为高级语言、中级语言和低语言习惯通常分为高级语言、中级语言和低级语言,与人类自然语言相差较大、接近于级语言,与人类自然语言相差较大、接近于机器描述的计算机语言称为低级语言,低级机器描述的计算机语言称为低级语言,低级语言包括机器语言和汇编语言。本章主要介语言包括机器语言和汇编语言。本章主要介绍和计算机硬件

3、系统紧密相关的汇编语言程绍和计算机硬件系统紧密相关的汇编语言程序设计。序设计。本章目录本章目录5.1 汇编语言基础5.2 汇编语言程序结构5.3 汇编语言程序设计小结第第5 5章章 汇编语言程序设计基础汇编语言程序设计基础 在计算机内部,控制计算机工作的指令都以二进制代在计算机内部,控制计算机工作的指令都以二进制代码的形式出现,这样的指令称为机器指令,用机器指令编码的形式出现,这样的指令称为机器指令,用机器指令编写的程序称为机器语言程序。写的程序称为机器语言程序。可见,机器语言是二进制编可见,机器语言是二进制编码表示的命令和数据的总称,码表示的命令和数据的总称,是面向机器的,能够被计算是面向机

4、器的,能够被计算机直接识别和执行的。然而,二进制表述的机器语言既不机直接识别和执行的。然而,二进制表述的机器语言既不直观,又不便于记忆、阅读和书写,为了程序设计的方便,直观,又不便于记忆、阅读和书写,为了程序设计的方便,产生了汇编语言。汇编语言是一种符号语言,用与操作功产生了汇编语言。汇编语言是一种符号语言,用与操作功能含义相应的缩写英文字符组成的助记符号作为编程使用能含义相应的缩写英文字符组成的助记符号作为编程使用的语言,来表示二进制格式的指令代码和变量地址。计算的语言,来表示二进制格式的指令代码和变量地址。计算机在运行汇编语言程序之前要先将其转换成机器代码,才机在运行汇编语言程序之前要先将

5、其转换成机器代码,才能由计算机识别执行,转换的过程是由编译程序来完成。能由计算机识别执行,转换的过程是由编译程序来完成。5.1 5.1 汇编语言基础汇编语言基础5.1.1 汇编语言概述汇编语言概述在汇编语言中,符号指令和机器指令通常是一一在汇编语言中,符号指令和机器指令通常是一一对应的,汇编语言与机器语言相比编程简单、便对应的,汇编语言与机器语言相比编程简单、便于交流,并且保留了机器语言与硬件系统联系密于交流,并且保留了机器语言与硬件系统联系密切的特点,所以,汇编语言仍然是面向机器的语切的特点,所以,汇编语言仍然是面向机器的语言,在使用汇编语言时必须对相应的计算机硬件言,在使用汇编语言时必须对

6、相应的计算机硬件有一定了解,有一定了解,CPUCPU不同的计算机,汇编语言也不同。不同的计算机,汇编语言也不同。由于机器不能直接执行汇编语言源程序,所以必由于机器不能直接执行汇编语言源程序,所以必须先将源程序转换成二进制代码表示的机器指令,须先将源程序转换成二进制代码表示的机器指令,完成这一功能的软件就是汇编程序,在完成这一功能的软件就是汇编程序,在IBM-PCIBM-PC微型计算机系统中,目前广泛使用的汇编程序是微型计算机系统中,目前广泛使用的汇编程序是由由MicrosoftMicrosoft公司开发的宏汇编程序公司开发的宏汇编程序 MASM MASM。用汇编语言设计的程序能够充分利用硬件系

7、用汇编语言设计的程序能够充分利用硬件系统的功能和结构特性,有效地加快程序的执行速统的功能和结构特性,有效地加快程序的执行速度;直接对寄存器、存储器和度;直接对寄存器、存储器和I/O端口进行操作,端口进行操作,减少程序占用的存储空间。减少程序占用的存储空间。但是,由于汇编语言对于数学模型中的关系但是,由于汇编语言对于数学模型中的关系表示不够直观,使得在一些复杂计算程序设计中,表示不够直观,使得在一些复杂计算程序设计中,设计汇编语言程序要花费较多的时间,编程上有设计汇编语言程序要花费较多的时间,编程上有一定难度。一定难度。另外,由于是面向机器的语言,所以要求程另外,由于是面向机器的语言,所以要求程

8、序设计人员必须具备一定的计算机硬件知识。序设计人员必须具备一定的计算机硬件知识。同其它语言一样,汇编语言的同其它语言一样,汇编语言的基本组成单位是语句,在汇编语言基本组成单位是语句,在汇编语言源程序中每个语句由四项组成源程序中每个语句由四项组成.其格式如下:其格式如下:标号:标号:操作项操作项 操作数操作数 ;注释;注释其中其中,操作项是必不可少的。,操作项是必不可少的。5.1.2 汇编语言语句格式汇编语言语句格式 标号是一个可选字段,由字母标号是一个可选字段,由字母(A Z、a z)数字数字(0 9)及专用字符及专用字符(?、.、-、$)组成的字符串,组成的字符串,最长不超过最长不超过31个

9、字符,要求必须以字母开头,用冒号与操作个字符,要求必须以字母开头,用冒号与操作项分开。标号实质上是指令的符号地址,但并不是所有指令项分开。标号实质上是指令的符号地址,但并不是所有指令语句都有标号。如果指令语句前有标号,则程序的其他部分语句都有标号。如果指令语句前有标号,则程序的其他部分可以引用这个标号,如程序中的可以引用这个标号,如程序中的JMP指令和指令和CALL指令的转移指令的转移目标由标号指定,即目标由标号指定,即JMP指令和指令和CALL指令是根据标号来确定指令是根据标号来确定它们之后要执行的语句,可见标号其实是指定了具体的指令它们之后要执行的语句,可见标号其实是指定了具体的指令地址,

10、所以相同的标号定义在同一程序中只允许出现一次。地址,所以相同的标号定义在同一程序中只允许出现一次。1、标号字段、标号字段 标号有三种属性:段、偏移量和类型。标号有三种属性:段、偏移量和类型。标号的段属性标号的段属性是定义标号的程序段的段基值;标号的偏移量属性是表是定义标号的程序段的段基值;标号的偏移量属性是表示该标号在段内的偏移地址,偏移量是一个示该标号在段内的偏移地址,偏移量是一个16位的无符位的无符号数;标号的类型属性有号数;标号的类型属性有NEAR和和FAR两种,两种,NEAR只能只能提供同一段内的指令调用,提供同一段内的指令调用,FAR可以被其他段指令调用。可以被其他段指令调用。操作项

11、是汇编语言程序中不可操作项是汇编语言程序中不可省略的主要部分,用指令助记符省略的主要部分,用指令助记符或定义符表示的机器指令操作码,或定义符表示的机器指令操作码,如:如:MOV、ADD等,它告诉等,它告诉CPU要完成什么具体操作。有的操作要完成什么具体操作。有的操作项带有前缀,指令系统中允许与项带有前缀,指令系统中允许与指令助记符一起出现的前缀是前指令助记符一起出现的前缀是前缀指令和段超越前缀。缀指令和段超越前缀。2、操作项字段、操作项字段 操作数紧跟在操作项之后,具体指明操作数紧跟在操作项之后,具体指明操作项的指令对哪些变量或常数进行操作,操作项的指令对哪些变量或常数进行操作,它可以包含两个

12、操作数、一个操作数或无它可以包含两个操作数、一个操作数或无操作数。如:操作数。如:MOV、ADD等指令要求有两等指令要求有两个操作数,它们之间用逗号隔开;个操作数,它们之间用逗号隔开;NEG、INC等指令只需要一个操作数;而等指令只需要一个操作数;而CLC等等指令就不需要操作数,因为操作数已隐含指令就不需要操作数,因为操作数已隐含在指令助记符中了。操作数可以是数据,在指令助记符中了。操作数可以是数据,也可以是存放数据的地址,所以可以作为也可以是存放数据的地址,所以可以作为操作数的有:常量、变量、表达式、寄存操作数的有:常量、变量、表达式、寄存器和标号。器和标号。2、操作数字段、操作数字段 变量

13、变量 变量是指存放在存储器或变量是指存放在存储器或寄存器中的数据,这些数寄存器中的数据,这些数据随着程序运行可能随时据随着程序运行可能随时会发生变化。寄存器有固会发生变化。寄存器有固定的名字,如:定的名字,如:AL、AX等;等;存储器常以其地址或地址存储器常以其地址或地址表达式的形式出现。应该表达式的形式出现。应该指出,变量也有段、偏移指出,变量也有段、偏移量和类型三个属性。量和类型三个属性。常量是指令中的固定值,它常量是指令中的固定值,它们在程序运行期间不发生变化,们在程序运行期间不发生变化,它可以分为数值常量和字符串它可以分为数值常量和字符串常量。例如:立即数寻址时的常量。例如:立即数寻址

14、时的立即数;直接寻址时的地址;立即数;直接寻址时的地址;ASCII码字符串等都属于常量。码字符串等都属于常量。在汇编语言源程序中,数值常在汇编语言源程序中,数值常量可以用二进制数、八进制数、量可以用二进制数、八进制数、十进制数和十六进制数来表示,十进制数和十六进制数来表示,但要用不同的后缀加以区别。但要用不同的后缀加以区别。要注意的是,汇编语言要求数要注意的是,汇编语言要求数值常量的第一位必须是数字,值常量的第一位必须是数字,如:如:FFFFH应写成应写成0FFFFH,否则汇编时会被误作为标号处否则汇编时会被误作为标号处理。理。常量常量 表达式表达式 表达式是操作数最常见的形表达式是操作数最常

15、见的形式,其值由常数、变量、标号通过运算符连接,式,其值由常数、变量、标号通过运算符连接,在汇编时计算确定。汇编语言中运算符分为:算在汇编时计算确定。汇编语言中运算符分为:算术运算符、逻辑运算符、关系运算符、分析运算术运算符、逻辑运算符、关系运算符、分析运算符和属性修改运算符等。符和属性修改运算符等。算术运算符:算术运算符:常用的算术运算符有:加常用的算术运算符有:加(+)、减减(-)、乘乘()、除除(/)和模和模(MOD)等等。算术运算的结果是一个数值,对于表示存储算术运算的结果是一个数值,对于表示存储器地址的地址表达式加和减运算才有意义。器地址的地址表达式加和减运算才有意义。例如:例如:M

16、OV AX,VARX+2 表示将表示将VARX表示的地址加表示的地址加2后对应的存储单后对应的存储单元内的数据送元内的数据送AX。逻辑运算符:逻辑运算符:逻辑运算符包括:逻辑运算符包括:AND(逻辑(逻辑“与与”)、)、OR(逻辑(逻辑“或或”)、)、XOR(逻辑(逻辑“异或异或”)、)、NOT(逻(逻辑辑“非非”),),用于数值表达式中对数值进行按位逻辑运用于数值表达式中对数值进行按位逻辑运算,结果也是一个数。算,结果也是一个数。例如:例如:MOV AL,0FH AND 35H 表示将表示将0FH与与35H按位逻辑按位逻辑“与与”后得到的数值后得到的数值(05H)送)送AL。注意:注意:逻辑

17、运算符逻辑运算符AND、OR、XOR、NOT同时也同时也是指令助记符,作为运算符时在程序汇编时用作计算;是指令助记符,作为运算符时在程序汇编时用作计算;作为指令助记符时是在程序执行时用作计算的。作为指令助记符时是在程序执行时用作计算的。关系运算符:关系运算符:关系运算符有关系运算符有EQ(等于等于)、NE(不等于不等于)、LT(小于小于)、GT(大于大于)、LE(小于等于小于等于)、GE(大(大于等于)。于等于)。关系运算符必须有两个操作数,而关系运算符必须有两个操作数,而且必须是两个数值或是同一段内的存储单元地且必须是两个数值或是同一段内的存储单元地址。关系运算符只能有两个结果址。关系运算符

18、只能有两个结果“0”或或“1”,关系成立时运算结果为关系成立时运算结果为0FFFFH,关系不成立,关系不成立时运算结果为时运算结果为0。要注意的是,关系运算符一。要注意的是,关系运算符一般不单独使用,常与其他运算符结合起来使用。般不单独使用,常与其他运算符结合起来使用。例如:例如:MOV AX,4 NE 3 表示将表示将4和和3进行是否不相等的判断,结果进行是否不相等的判断,结果送送AX。这里由于。这里由于4不等于不等于3,所以该关系运算,所以该关系运算结果应为结果应为0FFFFH,并送寄存器,并送寄存器AX。分析操作符:分析操作符:分析操作符包括分析操作符包括OFFSET、SEG、TYPE、

19、SIZE和和LENGTH,它们的作用,它们的作用是把一个存储单元地址是把一个存储单元地址分解为段地址和偏移地址。分解为段地址和偏移地址。1)OFFSET 表示取标号或变量地址的偏移量,表示取标号或变量地址的偏移量,例如:例如:MOV DX,OFFSET STRING 表示将表示将STRING的偏移地址送的偏移地址送DX寄存器,属于立寄存器,属于立即数寻即数寻 址方式。址方式。2)SEG 表示取标号或变量的段地址。表示取标号或变量的段地址。例如:例如:MOV BX,SEG TABLE1 表示将表示将TABLE1的段地址送的段地址送BX寄存器。寄存器。3)TYPE 运算结果是一个数值,表示存储单元

20、操运算结果是一个数值,表示存储单元操作数作数 的类型。运算结果与操作数类型的对应关系见表的类型。运算结果与操作数类型的对应关系见表51。例如:例如:VAR DW 1234H ARRAY DB 56H MOV AX,TYPE VAR MOV BX,TYPE ARRAY 上例中前两句伪指令定义了变量上例中前两句伪指令定义了变量VAR的类型为字,变量的类型为字,变量ARRAY的类型为字节,后两句将的类型为字节,后两句将VAR、ARRAY的类型对应的类型对应数值送寄存器数值送寄存器AX、BX,即执行,即执行TYPE后后AX的值应为的值应为2,BX的的值应为值应为1。表表51 TYPE运算结果与操作数类

21、型的对应关运算结果与操作数类型的对应关系系TYPETYPE运算运算结结果果操作数操作数类类型型TYPETYPE运算运算结结果果操作数操作数类类型型1 1BYTE(DB)BYTE(DB)-1-1NEARNEAR2 2WORD(DW)WORD(DW)-2-2FARFAR4 4DWORD(DD)DWORD(DD)4)LENGTH 一般加在数组变量的前面,作一般加在数组变量的前面,作用是计算数组变量占存储单元的个数。若使用用是计算数组变量占存储单元的个数。若使用DUP,则执行结果是外层,则执行结果是外层DUP的给定值;若没有的给定值;若没有使用使用DUP,则执行结果为,则执行结果为1。例如:例如:D1

22、 DB 10 DUP(0FH)D2 DB ABCDEFGHIJK MOV BH,LENGTH D1 MOV BL,LENGTH D2 前两句伪指令定义变量前两句伪指令定义变量D1、D2的类型为字节,的类型为字节,重复操作符重复操作符DUP表示从表示从D1开始连续设定开始连续设定10个字节个字节的空间,且将内容设定为的空间,且将内容设定为0FH。后两句执行了。后两句执行了LENGTH运算后,结果分别为运算后,结果分别为10和和1,即执行,即执行LENGTH后将后将10送送BH,将将1送送BL。属性修改运算符属性修改运算符:属性修改运算符有属性修改运算符有PTR、THIS和和STORT,用于指定或

23、修改变,用于指定或修改变量、标号和存储器操作数的类型属性,也称量、标号和存储器操作数的类型属性,也称综合运算符。综合运算符。1)PTR 用于指定或修改存储单元操作用于指定或修改存储单元操作数的类型。数的类型。例如:例如:MOV WORD PTR 5000H,8 执行执行PTR后指定存储单元后指定存储单元5000H为一个为一个字单元,上面的语句是将数值字单元,上面的语句是将数值8送地址为送地址为5000H的存储单元,存储单元类型为字,因的存储单元,存储单元类型为字,因此执行语句后,此执行语句后,5000H存储单元的内容为存储单元的内容为08H,5001H存储单元的内容为存储单元的内容为00H。注

24、意,。注意,PTR的修改是临时性的,仅在本语句中有效。的修改是临时性的,仅在本语句中有效。2)THIS 也是用来指定或修改存储单元的类也是用来指定或修改存储单元的类型。与型。与PTR不同的是,该运算建立指定类型的地址不同的是,该运算建立指定类型的地址操作数,其段地址和偏移量与下一个存储单元地址操作数,其段地址和偏移量与下一个存储单元地址相同,因此相同,因此THIS运算符更具有灵活性。运算符更具有灵活性。例如:例如:BEGIN EQU THIS FAR PUSH AX 上述语句是使上述语句是使PUSH AX指令有一个具备指令有一个具备FAR属属性的地址性的地址BEGIN,使得标号,使得标号BEG

25、IN可以被其他段的可以被其他段的JMP指令直接调用。指令直接调用。3)SHORT 用于指定某个标号的类型为用于指定某个标号的类型为“短短标号标号”,即使当前指令位置到指定标号的距离在,即使当前指令位置到指定标号的距离在128127个字节的范围内个字节的范围内 其他运算符:其他运算符:1)冒号冒号 一般跟在段寄存器名之后,用于给存储单一般跟在段寄存器名之后,用于给存储单元操作数指定段属性,不必考虑存储单元原来的隐含属元操作数指定段属性,不必考虑存储单元原来的隐含属性。性。例如:例如:MOV AX,ES:DI冒号跟在段寄存器冒号跟在段寄存器ES之后,表示段寄存器的偏移地址之后,表示段寄存器的偏移地

26、址由由DI指定。指定。2)字节分离运算符字节分离运算符LOW和和HIGH 用于获得一个数用于获得一个数值或表达式的低位或高位字节。值或表达式的低位或高位字节。例如:例如:DATAX EQU 1234H MOV AL,LOW DATAX MOV AH,HIGH DATAX 上述程序中,第一句定义上述程序中,第一句定义DATAX等于等于1234H;第二;第二句执行句执行LOW表示取表示取DATAX的低位,即将的低位,即将34H送送AL;第;第三句执行三句执行HIGH表示取表示取DATAX的高位,即将的高位,即将12H送送AH。需要注意的是需要注意的是:在表达式中可能出:在表达式中可能出现各种运算的

27、运算符,汇编时都将运算现各种运算的运算符,汇编时都将运算出它们的具体的结果,汇编程序的这个出它们的具体的结果,汇编程序的这个运算过程将按照它们的优先级别进行运运算过程将按照它们的优先级别进行运算,运算规则是:算,运算规则是:先执行优先级别高的运算;先执行优先级别高的运算;优先级别相同的运算,按从左到右的优先级别相同的运算,按从左到右的顺序进行;顺序进行;可以使用各种括号改变运算顺序可以使用各种括号改变运算顺序。各种运算符的优先级别见表各种运算符的优先级别见表52,为为1的优先级别最高,为的优先级别最高,为11的优先级别的优先级别最低。最低。优优先先级别级别 运算符运算符优优先先级别级别运算符运

28、算符 1 1LENGTH,SIZE,(),LENGTH,SIZE,(),7 7EQ,NE,LT,LE,GT,GEEQ,NE,LT,LE,GT,GE2 2:8 8NOTNOT3 3PTR,OFFSET,SEG,TYPE,THISPTR,OFFSET,SEG,TYPE,THIS9 9ANDAND4 4HIGH,LOWHIGH,LOW1010OR,XOROR,XOR5 5*,/,MOD,SHL,SHR*,/,MOD,SHL,SHR1111SHORTSHORT6 6+,-+,-表表52 运算符的优先级别运算符的优先级别 注释也是一个任选项,跟在汇编语句注释也是一个任选项,跟在汇编语句之后,以分号之后,

29、以分号“;”开始,注释内容并不开始,注释内容并不出现在汇编后的机器代码中,也不影响汇出现在汇编后的机器代码中,也不影响汇编程序的功能。一段完整的程序中,注释编程序的功能。一段完整的程序中,注释是很重要的部分,它用于说明一条指令或是很重要的部分,它用于说明一条指令或一段程序的功能,阐述程序的思路,使程一段程序的功能,阐述程序的思路,使程序容易阅读,特别在模块化程序设计中可序容易阅读,特别在模块化程序设计中可通过注释将各模块的功能描述出来,大大通过注释将各模块的功能描述出来,大大加强了程序的可读性。加强了程序的可读性。4、注释、注释返回本章目录返回本章目录 例如:例如:AND AX,VARTB A

30、ND 8000H 表示将表示将VARTB表示的地址与表示的地址与8000H按按位逻辑位逻辑“与与”后,对应的存储单元内的数后,对应的存储单元内的数据再与据再与AX内的数据进行逻辑内的数据进行逻辑“与与”。可见,。可见,在汇编时计算在汇编时计算VARTB AND 8000H,得到的,得到的数值作为程序的一个操作数;执行程序时数值作为程序的一个操作数;执行程序时计算第一个计算第一个AND,将前面得到的操作数与,将前面得到的操作数与AX内的数据进行内的数据进行“与与”运算,结果送运算,结果送AX。汇编语言源程序采用分段式结构,一个汇汇编语言源程序采用分段式结构,一个汇编语言源程序由若干个逻辑段组成,

31、每个逻辑编语言源程序由若干个逻辑段组成,每个逻辑段以段以SEGMENT语句开始,以语句开始,以ENDS语句结束,语句结束,整个源程序以整个源程序以END语句结束。而逻辑段包括语句结束。而逻辑段包括数据段、堆栈段、代码段及附加段,要注意任数据段、堆栈段、代码段及附加段,要注意任何一个源程序至少必须有一个代码段和一条作何一个源程序至少必须有一个代码段和一条作为源程序文件结束的伪指令为源程序文件结束的伪指令END,END后面后面的标号的标号START表示该程序执行时的启动地址。表示该程序执行时的启动地址。下面给出一个简单的汇编语言源程序,以便同下面给出一个简单的汇编语言源程序,以便同学对汇编语言源程

32、序的格式结构有一个大概的学对汇编语言源程序的格式结构有一个大概的了解。了解。5.2 5.2 汇编语言程序结构汇编语言程序结构5.2.1 源程序源程序 DATA SEGMENT ;定义一个名字为;定义一个名字为DATA的段的段 HELLO DB HELLO WORLD1$;在;在 DATA 段内定义一个字符串变量,并赋值段内定义一个字符串变量,并赋值 DATA ENDS ;DATA段结束段结束 CODE SEGMENT ;定义一个名字为;定义一个名字为 CODE的程序代码段的程序代码段 ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;给;给

33、DS赋初值赋初值 MOV DX,OFFSET HELLO ;取字符串;取字符串 变量的偏移量变量的偏移量 MOV AH,9 ;置字符串显示功能号;置字符串显示功能号 INT 21H ;DOS功能调用功能调用 MOV DL,ODH ;送回车符;送回车符 MOV AH,2 ;置;置ASCII码显示功能号码显示功能号 INT 21H MOV DL,OAH ;送换行符;送换行符 MOV AH,2 INT 21H MOV AH,4CH INT 21H ;返回操作系统;返回操作系统 CODE ENDS ;代码段结束;代码段结束 END START ;源程序结束;源程序结束 从上面的汇编语言源程序可以看出,

34、一个汇编语言源从上面的汇编语言源程序可以看出,一个汇编语言源程序一般总由若干段组成,这里第一段为数据段程序一般总由若干段组成,这里第一段为数据段DATA,它在存储器中存放用于显示输出的数据;第二段为代码段它在存储器中存放用于显示输出的数据;第二段为代码段CODE,它包括了许多以符号表示的指令,用于实现数据,它包括了许多以符号表示的指令,用于实现数据的输出。的输出。程序运行时,在汇编语言源程序中除了执行程序运行时,在汇编语言源程序中除了执行上一章中介绍的指令外,还要执行伪指令和上一章中介绍的指令外,还要执行伪指令和宏指令。伪指令又称伪操作,汇编程序对源宏指令。伪指令又称伪操作,汇编程序对源程序汇

35、编时,伪指令本身不会产生可执行的程序汇编时,伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元源程序的某些信息,或者用来说明内存单元的用途,即伪指令在汇编过程中是由汇编程的用途,即伪指令在汇编过程中是由汇编程序执行的指令,它可以用来进行数据定义、序执行的指令,它可以用来进行数据定义、符号定义、段定义、过程定义及程序命名及符号定义、段定义、过程定义及程序命名及结束等主要操作。结束等主要操作。5.2.2 伪指令伪指令 数据定义伪指令用于定义变量的类型、给存储器赋初数据定义伪指令用于定义变量的类型、给存储器赋初

36、值或给变量分配存储单元。值或给变量分配存储单元。常用的数据定义伪指令有常用的数据定义伪指令有DB、DW、DD等。等。一般格式为:一般格式为:标号标号 伪指令助记符伪指令助记符 数据表达式数据表达式 方括号中的标号为任选项,通常使用符号地址表示。方括号中的标号为任选项,通常使用符号地址表示。数据表达式可以包含多个数据,它们之间用逗号分隔开。数据表达式可以包含多个数据,它们之间用逗号分隔开。数据定义伪指令助记符有以下三种:数据定义伪指令助记符有以下三种:DB 定义变量类型为字节定义变量类型为字节(BYTE),),DB后面的每个后面的每个操作数占一个字节单元。操作数占一个字节单元。DW 定义变量类型

37、为字定义变量类型为字(WORD),),DW后面的每个后面的每个操作数占一个字单元,即两个字节单元。在内存中,低字操作数占一个字单元,即两个字节单元。在内存中,低字节在前,高字节在后。节在前,高字节在后。DD 定义变量类型为双字定义变量类型为双字(DWORD),),DD后面的每后面的每个操作数占两个字单元,即四个字节单元。在内存中,低个操作数占两个字单元,即四个字节单元。在内存中,低位字在前,高位字在后。位字在前,高位字在后。1、数据定义伪指令、数据定义伪指令 这些数据定义伪操作可以把数据项存入指定的存储单元,这些数据定义伪操作可以把数据项存入指定的存储单元,或分配存储单元空间。例如:或分配存储

38、单元空间。例如:R1 DB 0DH ;定义;定义R1单元的数值为单元的数值为0DH R2 DB?;定义;定义R2单元预留一个字节的存储空间单元预留一个字节的存储空间 R3 DB 1,2,3 ;定义;定义R3开始的开始的3个单元的数值为个单元的数值为 01H,02H,03H R4 DW 5 DUP(?);定义;定义R4预留预留5个字的存储空间个字的存储空间 R5 DB GOOD!;定义;定义R5为字符串,其存储单元为字符串,其存储单元 数值为数值为47H,4FH,4FH,44H,;21H 上例说明,数据表达式除了可以是二进制、十进制、十上例说明,数据表达式除了可以是二进制、十进制、十六进制的常数

39、,也可以是表达式及字符串,还可以是问号六进制的常数,也可以是表达式及字符串,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋,它仅给变量保留相应的存储单元,而不给变量赋初值。当相同的操作数重复出现或要保留多个存储单元时,初值。当相同的操作数重复出现或要保留多个存储单元时,可用重复操作符号可用重复操作符号DUP表示,重复次数由表示,重复次数由DUP之前的数字之前的数字决定。经过汇编伪指令,数据在存储单元中的分配如图决定。经过汇编伪指令,数据在存储单元中的分配如图5-1所示。所示。R1 ODHR2 R3 01H 02H 03H R4R5 47H4FH4FH44H21H保留保留5个个字

40、的存储字的存储空间,即空间,即10个字节个字节图图5-1 伪指令执行后数据区的分配情况伪指令执行后数据区的分配情况R1 ODHR2 R3 01H 02H 03H R4R5 47H4FH4FH44H21H保留保留5个个字的存储字的存储空间,即空间,即10个字节个字节 由图由图5-1可见,存储单元中的数据均由补可见,存储单元中的数据均由补码表示;对于多字节的数据分配,高字节存码表示;对于多字节的数据分配,高字节存放在高地址单元,低字节存放在低地址单元;放在高地址单元,低字节存放在低地址单元;对于字符串存储单元存放的是相应的对于字符串存储单元存放的是相应的ASCII码;对于变量或标号存储单元存放的是

41、相应码;对于变量或标号存储单元存放的是相应的地址偏移量。的地址偏移量。另外,在伪指令中还可以对重复子句进另外,在伪指令中还可以对重复子句进行嵌套,例如:行嵌套,例如:BUFFER DB 2,2 DUP(1,2 DUP(2,3)该伪指令汇编后的数据分配情况如图该伪指令汇编后的数据分配情况如图52所示。所示。03HBUFFER 02H01H02H03H02H01H02H03H02H03H图图5-2 伪指令执行后伪指令执行后数据区的分配情况数据区的分配情况 这里的符号是指这里的符号是指变量名、标号名、过程名、指令助记符变量名、标号名、过程名、指令助记符和寄存器名,符号定义伪指令用于给一个符号重新命名

42、或定和寄存器名,符号定义伪指令用于给一个符号重新命名或定义新的类型属性。义新的类型属性。(1)EQU伪指令伪指令 EQU伪指令将表达式的值赋予一个伪指令将表达式的值赋予一个名字,这是一个等值语句。定义以后可以用这个名字来代替名字,这是一个等值语句。定义以后可以用这个名字来代替对应的表达式。表达式可以是一个常数、符号、数值、表达对应的表达式。表达式可以是一个常数、符号、数值、表达式或地址表达式,式或地址表达式,EQU伪指令的格式伪指令的格式如下:如下:名字名字 EQU 表达式表达式2、符号定义伪指令、符号定义伪指令 EQU伪指令可以使程序更加简练。如果源程序中伪指令可以使程序更加简练。如果源程序

43、中需要多次引用某个表达式,可以用一个比较简短的名需要多次引用某个表达式,可以用一个比较简短的名字通过字通过EQU伪指令来代表这个表达式。如果将来需要伪指令来代表这个表达式。如果将来需要修改表达式,只需修改修改表达式,只需修改EQU语句中的表达式,而不必语句中的表达式,而不必修改多处,便于程序的维护。需要注意的是,修改多处,便于程序的维护。需要注意的是,EQU伪伪指令不允许对同一符号重复定义指令不允许对同一符号重复定义,即同一源程序中,用即同一源程序中,用EQU定义过的变量,不能再定义其他值。定义过的变量,不能再定义其他值。例如:例如:FIVE EQU 5 ;FIVE赋值为赋值为5 NINE E

44、QU FIVE+4 ;NINE定义为数值表达式,其定义为数值表达式,其 值为值为9 REGS EQU SI ;指定寄存器;指定寄存器SI的名字为的名字为REGS ADDR EQU TABLE ;将标号;将标号TABLE赋值到赋值到ADDR (2)等号等号(=)伪指令伪指令 等号等号(=)伪指令的功能与伪指令的功能与EQU 伪指令相仿,区别在于它可以对同一个名字重复定义伪指令相仿,区别在于它可以对同一个名字重复定义.其其 指令格式如下:名字指令格式如下:名字 =表达式表达式 利用等号利用等号(=)伪指令可以使程序设计更加灵活。伪指令可以使程序设计更加灵活。例如:例如:TABLE=1TABLE=T

45、ABLE+1 MOV AX,TABLE CMP AX,100 JNE RRRR MOV AX,TABLE RRRR:ADD AX,1 上例中,标号上例中,标号TABLE被定义了不止一次,被定义了不止一次,每循环一次它的数值每循环一次它的数值都会变化。都会变化。段定义伪指令在汇编语言源程序中定义逻辑段,提供段定义伪指令在汇编语言源程序中定义逻辑段,提供了构造程序的手段。常用的段定义伪指令有了构造程序的手段。常用的段定义伪指令有ASSUME、SEGMENT和和ENDS等。等。(1)SEGMENT和和ENDS 用用SEGMENT和和ENDS伪指伪指令可以将程序分成多个段,用于定义一个逻辑段,给逻辑令

46、可以将程序分成多个段,用于定义一个逻辑段,给逻辑段赋予一个段名,并在后面的任选项中给出这个逻辑段的段赋予一个段名,并在后面的任选项中给出这个逻辑段的其他特性,如定义类型、组合类型和类别。其伪指令格式其他特性,如定义类型、组合类型和类别。其伪指令格式如下:如下:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 (段定义体)(段定义体)段名段名 ENDS3、段定义伪指令、段定义伪指令 SEGMENT伪指令定义一个逻辑段的开始,伪指令定义一个逻辑段的开始,ENDS伪指伪指令则表示一个逻辑段的结束,这两个伪指令总是成对出现。令则表示一个逻辑段的结束,这两个伪指令总是成对出现。前面

47、的段名是该逻辑段的标识符,是用来确定该逻辑段在前面的段名是该逻辑段的标识符,是用来确定该逻辑段在存储器中的首地址的,不可缺省,而且必须一致。两个伪存储器中的首地址的,不可缺省,而且必须一致。两个伪指令语句之间的部分是逻辑段的内容,指令语句之间的部分是逻辑段的内容,汇编语言的逻辑段汇编语言的逻辑段包括代码段、数据段和堆栈段等,代码段主要包含程序指包括代码段、数据段和堆栈段等,代码段主要包含程序指令和某些伪指令;令和某些伪指令;数据段用于定义数据和存储单元;堆栈数据段用于定义数据和存储单元;堆栈段主要为堆栈操作预留出存储空间。段主要为堆栈操作预留出存储空间。SEGMENT伪指令后面可以有三个任选项

48、伪指令后面可以有三个任选项 “定位类定位类型型”、“组合类型组合类型”、“类别类别”,它们用来指示汇编程序它们用来指示汇编程序和连接程序,如何确定段的边界,如何进行段的组合,以和连接程序,如何确定段的边界,如何进行段的组合,以及控制段的装入顺序。在简单汇编语言源程序中一般选用及控制段的装入顺序。在简单汇编语言源程序中一般选用缺省方式,常用于多模块的程序设计中。如果出现,三者缺省方式,常用于多模块的程序设计中。如果出现,三者的顺序必须符合格式中的规定,不能颠倒。的顺序必须符合格式中的规定,不能颠倒。1)定位类型:定位类型:定位类型任选项是告诉汇编程序如何确定位类型任选项是告诉汇编程序如何确定逻辑

49、段的边界在存储器中的开始位置,定位类型有四种:定逻辑段的边界在存储器中的开始位置,定位类型有四种:BYTE:表示逻辑段边界可以从任何一个字节开始,段:表示逻辑段边界可以从任何一个字节开始,段与段之间无空隙。这样,该逻辑段可以紧接在前一个逻辑段与段之间无空隙。这样,该逻辑段可以紧接在前一个逻辑段的后面。的后面。WORD:表示逻辑段边界从字地址开始,段与段之间的:表示逻辑段边界从字地址开始,段与段之间的空隙最多只有一个字节。这样该逻辑段的起始地址必须是偶空隙最多只有一个字节。这样该逻辑段的起始地址必须是偶数。数。PARA:表示逻辑段边界从节地址开始,:表示逻辑段边界从节地址开始,16个字节称为个字

50、节称为一个节。段地址为一个节。段地址为16的倍数,即的倍数,即XXX0H,这样段与段之间,这样段与段之间空隙最多为空隙最多为15个字节。如果省略定位类型选项,汇编语言程个字节。如果省略定位类型选项,汇编语言程序默认该逻辑段为序默认该逻辑段为PARA。PAGE:表示逻辑段边界地址从页边界开始。:表示逻辑段边界地址从页边界开始。256个字个字节成为一个页,则段地址为节成为一个页,则段地址为256的倍数,即的倍数,即XX00H,这样段,这样段与段之间空隙最多为与段之间空隙最多为255个字节。个字节。2)组合类型:组合类型:SEGMENT伪指令的第二个任选项是组伪指令的第二个任选项是组合类型,在满足定

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com