-第5章 汇编语言程序设计.ppt
《-第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之后,表示段寄存器的偏移地址之后,表示段寄存器的偏移地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- -第5章 汇编语言程序设计 汇编语言 程序设计
限制150内