PC汇编语言程序设计ppt课件 第5章 基本汇编语言.ppt
《PC汇编语言程序设计ppt课件 第5章 基本汇编语言.ppt》由会员分享,可在线阅读,更多相关《PC汇编语言程序设计ppt课件 第5章 基本汇编语言.ppt(157页珍藏版)》请在三一办公上搜索。
1、第五章 基本汇编语言,5.1 汇编语言的语句 5.2 汇编语言的表达式和运算符 5.3 伪指令语句 5.4 指令语句 5.5 汇编语言程序的格式 5.6 汇编语言程序的上机过程 习题五,5.1 汇编语言的语句,5.1.1 汇编语言的语句分类 汇编语言源程序中可以使用三类语句, 它们分别是: (1) 指令语句。这类语句又称机器指令语句, 其经汇编后能产生相应的目的码,或称机器代码,这些代码能被CPU直接识别并执行相应的操作。例如:第四章中已作过介绍的MOV, SUB, CMP, XOR等指令均属机器指令语句。,(2) 伪指令语句。这类语句指示汇编程序在汇编源程序时完成某些工作,比如给变量分配内存
2、单元地址,给某个符号赋一个值等。伪指令语句与指令语句的最大区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后会产生相应的机器代码;其次伪指令语句所指示的操作是在程序汇编时完成的, 而指令语句的操作必须在程序运行时才能完成。 例如,第四章介绍的数据定义伪指令DB,DW就属伪指令语句。,(3) 宏指令语句。在8088/8086和80X86系列的汇编语言中,允许用户将多次重复使用的程序段定义为宏。宏的定义必须按相应的规定进行,每个宏都有相应的宏名。在程序的任意位置, 若需要使用这段程序只要在相应的位置使用宏名,即相当于使用了这段程序。 因此,宏指令语句就是宏的引用。宏的引用语句就是宏指令语
3、句。有关宏的详细介绍见第十章。,5.1.2 汇编语言的语句格式,1 名字项 (1) 名字项的名称和含义。 在三类语句中,名字项有不同的名称和含义。名字项出现在指令语句或宏指令语句前时,称该名字项为标号且对应的标识符后面必须跟有冒号, 标号在汇编以后分配有地址。因此,标号可以用来指示指令代码在内存中的地址。标号又称为符号地址,可作为转移指令或子程序调用指令的目标地址。 若名字项出现在伪指令语句前,则该名字项称为符号名,根据不同的伪指令,这些符号名又可分为变量名、符号常数名、 子程序名或段名等。,(2) 名字项的书写规则。 名字项的书写有严格的规定, 它可使用下列字符: 字母 AZ、 az 数字
4、09 特殊字符 ?、 、 、- 、 等 名字项的第一个字符必须是字母或特殊字符, 从第二个字符起可以跟字母、 数字、特殊字符,但是问号本身不能单独作为名字, 名字最多由31个字符组成,多则无效。 需要注意的是,名字不能使用汇编语言的专用保留字, 8088/8086汇编语言中的指令助记符,寄存器名,伪指令名,表达式中使用的运算符和属性运算符等均不能作为名字项,否则汇编时会给出错误信息。另外,名字项在程序中不能重复定义。,(3) 名字项的属性。 名字项中标号和变量都有相应的属性, 分别介绍如下: 标号的属性。 标号一般出现在指令语句前面,它表示指令的符号地址, 指示汇编后该指令代码在内存中位置。因
5、此,它有三种属性: 段属性、偏移属性和类型属性。 段属性:表示该标号的段起始地址,且该地址一定是在CS段寄存器中。 偏移属性:表示标号在代码段中的段内偏移地址,是一个 16 位的无符号数,表示从段起始地址开始到定义标号的位置之间的距离(字节数)。 类型属性:表示该标号是在本段内引用,还是在其它段中引用。在段内引用的标号为NEAR属性,在段外引用的标号为FAR属性。, 变量的属性。 变量经常作为操作数出现在各种语句中,变量是在除代码段以外的段中用伪指令进行定义的,定义变量实际上就是给变量分配内存单元,因此,变量也有三种属性:段属性、偏移属性和类型属性。 段属性:表示变量所在段的起始地址。该地址值
6、必须在除代码段以外的其它段寄存器中。 偏移属性:表示变量在段内的偏移地址,即从段的起始地址开始到变量所对应的内存单元之间的字节数,用16位无符号表示偏移地址。 类型属性:表示该变量能存放的数据长度,它与变量定义时使用的伪指令有关。长度为1个字节的类型属性为BYTE, 长度为2个字节的类型属性为WORD等。同一个标号或变量的定义在一个程序中只允许一次, 否则会出现重复定义错误。,(4) 符号常数。 当名字项出现在EQU伪指令或“”语句之前时,称该名字项为符号常数。程序中用符号名代表一个常数或表达式值, 可以增加程序的可读性。符号常数经常在表达式中使用,也可单独作为操作数出现在语句中。字符常数没有
7、上述的属性问题。,2 操作项 操作项表示语句要实现的具体操作,可以是指令、伪指令、 宏指令语句的助记符。 汇编程序对于上述三类语句会作不同的处理。对于指令语句,汇编程序会将它翻译成二进制指令代码; 对于伪指令语句,汇编程序会按其意义完成汇编;对于宏指令语句, 汇编程序将其展开,也就是用宏体替代原来的宏指令语句。,3 操作数项 操作数项根据不同的语句由一个或多个表达式组成,两个以上的表达式之间要用逗号分开。 操作项的常见形式有:常数、 寄存器、 标号、 变量或表达式。其中,表达式是由常数、变量、 标号通过操作数运算符连接而成的式子。需要注意的是:表达式的值是在汇编的过程中计算出来的,根据表达式中
8、的成分,计算出来的结果可能是操作数的地址值,也可能就是操作数。 下面先介绍常数。 运算符、表达式、变量和标号的详细介绍见5.2和5.3节。 汇编语言的常数(或称常量)概念与高级语言相同, 允许使用以下三种常数:,(1) 数值常数。 数值常数分为整数和实数。分别介绍如下; 整数的表示方法。 整数可以使用二进制、八进制、十进制或十六进制的数来表示,为了区分不同的数制,在数的末尾加后缀字母以区分。 后缀字母“B”(Byte),表示它前面的数是二进制的,字母 “O”(Octal)或“Q“表示它前面的数是八进制的,字母“D”(Decimal) 表示它前面的数是十进制的,不加字母“D”也默认为是十进制的数
9、,字母“H”(Hexadecimal)表示它前面的数是十六进制的。后缀字母也同样适用于地址(段内偏移地址)。,当操作数或地址(段内偏移地址)使用十六进制数表示时, 若数的最高位以字母AF开头,则必须在它前面加一个0。这样可以使数或地址避免与变量、标号或寄存器名混淆。 例如,要给寄存器AL送一个十六进制的数(A)16的指令,数前不加0的指令为:MOV AL, AH,数前加0的指令为 MOV AL, 0AH。 显然,这两条指令执行结果是不同的, 数前加0的指令得到的结果才是所希望的。, 实数的表示方法。 有协处理器(浮点运算器)的主机,在汇编语言程序中还可安排各种实数运算, 实数可以采用两种形式表
10、示,一种是带小数点的十进制数形式。 另一种是指数形式,其格式为: 整数部分.小数部分E指数部分。例如:576.3,-312.125, 1.2E-1,37.54E+5都是正确的实数形式。,实数在存储器中以浮点数的形式存储,根据存储实数所用的字节数,又可分为短实数格式(又称单精度浮点数),长实数格式(又称双精度浮点数)和暂存实数格式(又称扩展精度数)。它们分别占用4个字节、 8个字节和10个字节。 若想在内存中预先定义上述三种实数必须使用DD, DQ和DT伪指令。 (DD,DQ和DT为数据定义伪指令, 本章稍后将进一步介绍。 )例如: DAT1 DD -245.6 ; 定义短实数 DAT2 DQ
11、3578.41 ; 定义长实数 DAT3 DT -1.23E-5 ; 定义暂存实数,(2) 字符串常数。 字符串常数是指用单引号括起来的一个字符或多个字符的序列。使用时可以在单引号内直接写字符序列, 也可以写字符的ASCII码,但ASCII码之间必须用逗号作分隔(此时不需要用单引号)。 例如, MOV AH, A指令和MOV AH, 41H指令是等价的。 (3) 符号常数。符号常数是指用EQU伪指令或赋值语句“=”定义过的符号名,可作操作数项或在表达式中使用。,4 注释项 注释项不是语句的必要部分。它主要用来说明一个程序、 一段程序或重要的指令的功能,增加程序的可读性。对于较大的程序,注释项更
12、不能少,有了注释, 程序易读,也便于日后修改和维护。 注释项可以独立存在于程序中,但必须以分号开头。汇编程序对于分号后面的内容不予汇编。利用注释项的这个特点, 在调试程序中, 也可将分号加到指令前,以暂时冻结有疑问的指令,调试正确后,再对这些指令解冻或删除, 这样可以减少语句增、 删的编辑工作。,5.2 汇编语言的表达式和运算符,汇编语言中,表达式是操作数项的常见形式, 它们经常出现在指令或伪指令语句中。表达式是由常数、变量、 标号通过运算符连接而成的。 需要提醒初学者的是:表达式中一般不允许出现寄存器,只有某些能存放段内偏移地址的寄存器才允许出现在表达式中。例如, SI, DI, BP, B
13、X等。 另外,表达式的值只计算一次, 在汇编时完成, 而不是在程序运行时完成。 例如:,X5 XX5 ; 赋值语句在循环体中 ,5.2.1 算术运算符 算术运算符有、 *、 /、 MOD以及只能出现在表达式中的SHR和SHL运算符。其中, 、 、 *、 /是最常用的运算符, 要求参加运算的数(或地址)均为整数, 运算的结果也为整数, 除法运算的结果是商的整数部分。 MOD运算的结果是前一个操作数除以后一个操作数得到的余数, 如15 MOD 2的结果为1。 ,出现在表达式中的SHR和SHL运算符其使用时的格式为: 表达式SHR次数或表达式SHL次数。其作用是在汇编时将表达式的值右移或左移指定的次
14、数,然后作为一个操作数。例如:,尽管算术运算符可以用在数值表达式或地址表达式中, 但在具体使用时仍要注意运算结果的物理意义是否正确。例如, 两个地址相除是无意义的,两个不同段的段基址相加、减是无意义的。另外还要注意运算对象的正确性,如: MOV AX, DX SHL 2指令中的第2个操作数项DX SHL 2是非法的,因为DX不能存放偏移地址。若DAT为已定义过的某个字节的符号, 那么MOV BL,DAT1指令中的第2个操作数是正确的,它表示要将DAT单元的地址加1,然后再将该数取出来传送给BL寄存器。,5.2.2 逻辑运算符 逻辑运算符依次为NOT, AND,OR和XOR。 逻辑运算是按位进行
15、操作的,位与位之间没有进位和借位。其中,NOT运算符是单操作数运算符,其余三个运算符是双操作数运算符。提请读者注意的是,出现在表达式中的上述运算符不是指令,运算符指定的运算是在汇编时完成的, 而指令是在程序运行时完成的。 例如: MOV AL, NOT 0F0H MOV BH, 0F0H AND 0FH,上述两条指令汇编后与下面两条指令等效: MOV AL, 0FH MOV BH, 0,5.2.3 关系运算符 关系运算符有六种,它们用于两个表达式值的比较,表达式的值一定是常数或是同一段内的偏移地址,比较的结果为逻辑值,关系成立, 结果为真, 用全“1”表示。 反之结果为假, 用全“0”表示。
16、六种关系运算符分别是: EQ 相等(Equal) NE 不等(Not equal) LT 小于(Less) LE 小于或等于(Less or Equal) GT 大于(Greater) GE 大于或等于(Greater or Equal),例如: MOV AL,5 EQ 3 MOV DH,5 GT 3 汇编后分别等效于: MOV AL, 0 MOV DH, 0FFH 若有两个数据类型相同的符号地址X和Y,在DB伪指令中, 则 V DB X GT Y 汇编时,当X的偏移地址大于Y的偏移地址时,变量V的内容为0FFH,反之其内容为0。,5.2.4 数值返回运算符 数值返回运算符有五种,这些运算符的
17、运算对象必须是变量或标号,其运算结果是变量或标号的特征值(类型属性值)或是它们对应的内存单元地址(段基址或段内偏移地址)。 带有上述运算符的表达式, 其格式可统一表示为: 运算符变量名或标号 下面介绍五种数值返回运算符。,2. SEG(Segment)运算符 当SEG运算符置于变量或标号前面时,汇编程序按SEG运算符的功能,取得了变量或标号所在段的段基址。 例如:想得到变量X的段基址并存放到AX寄存器, 可用指令 MOV AX, SEG X 上述指令执行后, AX寄存器的内容即为变量X的段基址。,3. TYPE运算符 当TYPE运算符置于变量前面时,汇编程序按TYPE运算符的功能,取得变量的类
18、型数字,该数字表示该变量所分配的存储单元(字节)数。即类型属性为BYTE的变量返回值为1, 类型属性为WORD的变量,返回值为2, 类型属性为DWORD的变量, 返回值为4。 当TYPE运算符置于标号前面时,汇编程序按其功能,返回标号的类型属性值;当该标号为NEAR属性时,返回值为-1, 标号为FAR属性时,返回值为-2。 例如:,上述两条指令在汇编后相当于指令: MOV AL, 1MOV CX, 10H,5. SIZE运算符 SIZE运算符仅对变量起作用,汇编程序对该运算符返回的值表示该变量所分配的总字节数,此数是该变量的LENGTH值和TYPE值的乘积。 例如:上例中的A2变量,若想知道它
19、分配的总字节数, 可用下述指令表示: MOV CX, SIZE A2汇编后相当于有指令: MOV CX, 20H即变量A2总共分配有20H个字节数。,5.2.5 属性修改运算符 1. PTR(Pointer)运算符 格式: 类型 PTR 地址表达式其中,表达式的形式可以是标号、变量或是用作地址偏移量的寄存器。PTR运算符的作用是将地址表达式的原类型属性临时修改成PTR运算符前面所指定的类型。指定的类型可以是 BYTE、WORD或DWORD。注意PTR运算符只在语句内有效。 例如:要将一个立即数20H存入以SI寄存器内容所指定的内存单元,那么SI所指向的单元是字节单元还是字单元,就可以使用PTR
20、运算符加以说明。,MOV BYTE PTRSI, 20H或 MOV WORD PTRSI, 20H 第一条指令表示目的操作数是字节单元,第二条指令表示目的操作数是字单元。 指令 JMP FAR PTR SUB 表示标号SUB不在转移指令的同一段内。即这条指令可使程序转向另一代码段。 DAB DB 12H, 34H MOV AX, WORD PTR DAB 上述传送指令的源操作数由于使用了PTR运算符将DAB的类型属性修改成WORD类型,因此,执行该指令时是取2个字节的数送给寄存器AX的。,3. THIS运算符 格式: THIS 属性或类型 THIS运算符和PTR运算符相似, 它可以建立一个指定
21、类型或指定距离的地址操作数。当建立一个指定类型的地址操作数时,该操作数的段基址和段内偏移地址与下一个存储单元地址相同。 例如: NEWTYPE EQU THIS BYTE WORDTYPE DW 10H, 2356H,汇编后建立一个新的地址操作数NEWTYPE,并且它的段基址,段内偏移地址和WORDTYPE相同,但前者是字节类型的,后者是字类型的。根据需要可以选择其中的符号地址,取一个字节的数据用符号地址NEWTYPE,取一个字的数据用符号地址WORDTYPE。 THIS运算符也可以建立一个指定距离属性的指令标号。 例如: BEGIN EQU THIS FARMOV CX, 0 汇编后,MOV
22、指令有一个FAR属性的地址BEGIN,这样就允许其它代码段中的JMP指令直接跳到BEGIN处执行MOV指令。,4. HIGH和LOW运算符 格式: HIGH/LOW表达式 其中, 表达式可以是数或地址表达式。 两个运算符都是针对一个16位的数或地址表达式的,其中, HIGH运算符取其高位字节,LOW运算符取其低位字节。例如: CONST EQU 1234H MOV AH, HIGH CONST MOV AL, LOW CONST,上述指令执行后, AH寄存器值为12H, AL寄存器的值为34H。 以上分别讨论了五大类运算符,当一个表达式中出现多种运算符时,应先计算优先级别高的运算符,对优先级相
23、同的运算符则应从左到右进行计算。 括号可用来改变计算次序,括号内的表达式应先计算。 运算符的优先级别见表5 - 1(本书未提及的运算符可查阅有关手册)。,表 5-1 运算符的优先顺序,5.3 伪指令语句,伪指令语句简称伪指令。伪指令是汇编语言程序设计的一个重要部分。程序员可以使用伪指令向汇编程序发出某些控制和操作指示,在汇编过程中完成相应的工作。伪指令与机器指令的最大区别是:伪指令由汇编程序解释后完成相应的操作, 汇编后不产生目的代码,经过汇编后得到的目的码程序中,伪指令已不复存在。机器指令语句一定有对应的目的代码,并由汇编程序翻译成机器代码,只能在程序运行时才能由CPU完成其操作。尽管不同的
24、汇编程序提供有不同的伪指令,但绝大部分伪指令都相互兼容。,目前国内比较流行的汇编程序是Microsoft的MASM5.0版本, 它最高能支持80386和80387处理器,并且比MASM1.0至MASM4.0的汇编和链接速度更快。而MASM6.0是微软公司1991推出的宏汇编程序, 它对MASM进行了重新组织,提供了许多新的伪指令、高级语言控制结构及许多新的数据类型, 更重要的是: 它能支持80486的汇编语言程序设计。,表 5-2 伪 指 令 分 类,5.3.1 数据定义伪指令 数据定义伪指令的主要功能是负责为变量分配内存单元, 也可以预置初值,或预留内存单元。 常用的伪指令有DB, DW,
25、DD, DQ和DT。 伪指令的格式为: 变量名 伪指令名 操作数项表其中,变量名为可选项,伪指令名可以是上述五种伪指令之一, 操作数项表表示操作数可由多个操作数组成。 操作数的形式可以是常数、表达式、字符串、?或带DUP的表达式。,不同伪指令为变量分配的内存单元有: D1 DB 操作数项表 ; 每项分配1个字节D2 DW 操作数项表 ; 每项分配2个字节D3 DD 操作数项表; 每项分配4个字节D4 DQ 操作数项表 ; 每项分配8个字节D5 DT 操作数项表 ; 每项分配10个字节,1 操作数为常数或表达式 数据定义伪指令可以为变量预置常数值或表达式值。例如: D1 DB 30H, 30 ;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PC汇编语言程序设计ppt课件 第5章 基本汇编语言 PC 汇编语言 程序设计 ppt 课件 基本
链接地址:https://www.31ppt.com/p-1481306.html