ImageVerifierCode 换一换
格式:PPT , 页数:157 ,大小:1,023.50KB ,
文档编号:2776387      下载积分:29 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-2776387.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(PC汇编语言程序设计课件-第5章-基本汇编语言.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

PC汇编语言程序设计课件-第5章-基本汇编语言.ppt

1、第五章 基本汇编语言 第五章 基本汇编语言 5.1 汇编语言的语句汇编语言的语句 5.2 汇编语言的表达式和运算符汇编语言的表达式和运算符 5.3 伪指令语句伪指令语句 5.4 指令语句指令语句 5.5 汇编语言程序的格式汇编语言程序的格式 5.6 汇编语言程序的上机过程汇编语言程序的上机过程 习题五习题五 第五章 基本汇编语言 5.1 汇编语言的语句汇编语言的语句 5.1.1 汇编语言的语句分类汇编语言的语句分类 汇编语言源程序中可以使用三类语句, 它们分别是: (1) 指令语句。这类语句又称机器指令语句, 其经汇编后能产生相应的目的码,或称机器代码,这些代码能被CPU直接识别并执行相应的操

2、作。例如:第四章中已作过介绍的MOV, SUB, CMP, XOR等指令均属机器指令语句。 第五章 基本汇编语言 (2) 伪指令语句。这类语句指示汇编程序在汇编源程序时完成某些工作,比如给变量分配内存单元地址,给某个符号赋一个值等。伪指令语句与指令语句的最大区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后会产生相应的机器代码;其次伪指令语句所指示的操作是在程序汇编时完成的, 而指令语句的操作必须在程序运行时才能完成。 例如,第四章介绍的数据定义伪指令DB,DW就属伪指令语句。 第五章 基本汇编语言 (3) 宏指令语句。在8088/8086和80X86系列的汇编语言中,允许用户将多次

3、重复使用的程序段定义为宏。宏的定义必须按相应的规定进行,每个宏都有相应的宏名。在程序的任意位置, 若需要使用这段程序只要在相应的位置使用宏名,即相当于使用了这段程序。 因此,宏指令语句就是宏的引用。宏的引用语句就是宏指令语句。有关宏的详细介绍见第十章。 第五章 基本汇编语言 5.1.2 汇编语言的语句格式汇编语言的语句格式 1 名字项名字项 (1) 名字项的名称和含义。 在三类语句中,名字项有不同的名称和含义。名字项出现在指令语句或宏指令语句前时,称该名字项为标号且对应的标识符后面必须跟有冒号, 标号在汇编以后分配有地址。因此,标号可以用来指示指令代码在内存中的地址。标号又称为符号地址,可作为

4、转移指令或子程序调用指令的目标地址。 若名字项出现在伪指令语句前,则该名字项称为符号名,根据不同的伪指令,这些符号名又可分为变量名、符号常数名、 子程序名或段名等。 第五章 基本汇编语言 (2) 名字项的书写规则。 名字项的书写有严格的规定, 它可使用下列字符: 字母 AZ、 az 数字 09 特殊字符 ?、 、 、- 、 等 名字项的第一个字符必须是字母或特殊字符, 从第二个字符起可以跟字母、 数字、特殊字符,但是问号本身不能单独作为名字, 名字最多由31个字符组成,多则无效。 需要注意的是,名字不能使用汇编语言的专用保留字, 8088/8086汇编语言中的指令助记符,寄存器名,伪指令名,表

5、达式中使用的运算符和属性运算符等均不能作为名字项,否则汇编时会给出错误信息。另外,名字项在程序中不能重复定义。 第五章 基本汇编语言 (3) 名字项的属性。 名字项中标号和变量都有相应的属性, 分别介绍如下: 标号的属性。 标号一般出现在指令语句前面,它表示指令的符号地址, 指示汇编后该指令代码在内存中位置。因此,它有三种属性: 段属性、偏移属性和类型属性。 段属性:表示该标号的段起始地址,且该地址一定是在CS段寄存器中。 偏移属性:表示标号在代码段中的段内偏移地址,是一个 16 位的无符号数,表示从段起始地址开始到定义标号的位置之间的距离(字节数)。 类型属性:表示该标号是在本段内引用,还是

6、在其它段中引用。在段内引用的标号为NEAR属性,在段外引用的标号为FAR属性。 第五章 基本汇编语言 变量的属性。 变量经常作为操作数出现在各种语句中,变量是在除代码段以外的段中用伪指令进行定义的,定义变量实际上就是给变量分配内存单元,因此,变量也有三种属性:段属性、偏移属性和类型属性。 段属性:表示变量所在段的起始地址。该地址值必须在除代码段以外的其它段寄存器中。 偏移属性:表示变量在段内的偏移地址,即从段的起始地址开始到变量所对应的内存单元之间的字节数,用16位无符号表示偏移地址。 类型属性:表示该变量能存放的数据长度,它与变量定义时使用的伪指令有关。长度为1个字节的类型属性为BYTE,

7、长度为2个字节的类型属性为WORD等。同一个标号或变量的定义在一个程序中只允许一次, 否则会出现重复定义错误。 第五章 基本汇编语言 (4) 符号常数。 当名字项出现在EQU伪指令或“”语句之前时,称该名字项为符号常数。程序中用符号名代表一个常数或表达式值, 可以增加程序的可读性。符号常数经常在表达式中使用,也可单独作为操作数出现在语句中。字符常数没有上述的属性问题。 第五章 基本汇编语言 2 操作项操作项 操作项表示语句要实现的具体操作,可以是指令、伪指令、 宏指令语句的助记符。 汇编程序对于上述三类语句会作不同的处理。对于指令语句,汇编程序会将它翻译成二进制指令代码; 对于伪指令语句,汇编

8、程序会按其意义完成汇编;对于宏指令语句, 汇编程序将其展开,也就是用宏体替代原来的宏指令语句。 第五章 基本汇编语言 3 操作数项操作数项 操作数项根据不同的语句由一个或多个表达式组成,两个以上的表达式之间要用逗号分开。 操作项的常见形式有:常数、 寄存器、 标号、 变量或表达式。其中,表达式是由常数、变量、 标号通过操作数运算符连接而成的式子。需要注意的是:表达式的值是在汇编的过程中计算出来的,根据表达式中的成分,计算出来的结果可能是操作数的地址值,也可能就是操作数。 下面先介绍常数。 运算符、表达式、变量和标号的详细介绍见5.2和5.3节。 汇编语言的常数(或称常量)概念与高级语言相同,

9、允许使用以下三种常数: 第五章 基本汇编语言 (1) 数值常数。 数值常数分为整数和实数。分别介绍如下; 整数的表示方法。 整数可以使用二进制、八进制、十进制或十六进制的数来表示,为了区分不同的数制,在数的末尾加后缀字母以区分。 后缀字母“B”(Byte),表示它前面的数是二进制的,字母 “O”(Octal)或“Q“表示它前面的数是八进制的,字母“D”(Decimal) 表示它前面的数是十进制的,不加字母“D”也默认为是十进制的数,字母“H”(Hexadecimal)表示它前面的数是十六进制的。后缀字母也同样适用于地址(段内偏移地址)。 第五章 基本汇编语言 当操作数或地址(段内偏移地址)使用

10、十六进制数表示时, 若数的最高位以字母AF开头,则必须在它前面加一个0。这样可以使数或地址避免与变量、标号或寄存器名混淆。 例如,要给寄存器AL送一个十六进制的数(A)16的指令,数前不加0的指令为:MOV AL, AH,数前加0的指令为 MOV AL, 0AH。 显然,这两条指令执行结果是不同的, 数前加0的指令得到的结果才是所希望的。 第五章 基本汇编语言 实数的表示方法。 有协处理器(浮点运算器)的主机,在汇编语言程序中还可安排各种实数运算, 实数可以采用两种形式表示,一种是带小数点的十进制数形式。 另一种是指数形式,其格式为: 整数部分.小数部分E指数部分。例如:576.3,-312.

11、125, 1.2E-1,37.54E+5都是正确的实数形式。 第五章 基本汇编语言 实数在存储器中以浮点数的形式存储,根据存储实数所用的字节数,又可分为短实数格式(又称单精度浮点数),长实数格式(又称双精度浮点数)和暂存实数格式(又称扩展精度数)。它们分别占用4个字节、 8个字节和10个字节。 若想在内存中预先定义上述三种实数必须使用DD, DQ和DT伪指令。 (DD,DQ和DT为数据定义伪指令, 本章稍后将进一步介绍。 )例如: DAT1 DD -245.6 ; 定义短实数 DAT2 DQ 3578.41 ; 定义长实数 DAT3 DT -1.23E-5 ; 定义暂存实数 第五章 基本汇编语

12、言 (2) 字符串常数。 字符串常数是指用单引号括起来的一个字符或多个字符的序列。使用时可以在单引号内直接写字符序列, 也可以写字符的ASCII码,但ASCII码之间必须用逗号作分隔(此时不需要用单引号)。 例如, MOV AH, A指令和MOV AH, 41H指令是等价的。 (3) 符号常数。符号常数是指用EQU伪指令或赋值语句“=”定义过的符号名,可作操作数项或在表达式中使用。 第五章 基本汇编语言 4 注释项注释项 注释项不是语句的必要部分。它主要用来说明一个程序、 一段程序或重要的指令的功能,增加程序的可读性。对于较大的程序,注释项更不能少,有了注释, 程序易读,也便于日后修改和维护。

13、 注释项可以独立存在于程序中,但必须以分号开头。汇编程序对于分号后面的内容不予汇编。利用注释项的这个特点, 在调试程序中, 也可将分号加到指令前,以暂时冻结有疑问的指令,调试正确后,再对这些指令解冻或删除, 这样可以减少语句增、 删的编辑工作。 第五章 基本汇编语言 5.2 汇编语言的表达式和运算符汇编语言的表达式和运算符 汇编语言中,表达式是操作数项的常见形式, 它们经常出现在指令或伪指令语句中。表达式是由常数、变量、 标号通过运算符连接而成的。 需要提醒初学者的是:表达式中一般不允许出现寄存器,只有某些能存放段内偏移地址的寄存器才允许出现在表达式中。例如, SI, DI, BP, BX等。

14、 另外,表达式的值只计算一次, 在汇编时完成, 而不是在程序运行时完成。 例如: X5 XX5 ; 赋值语句在循环体中 第五章 基本汇编语言 5.2.1 算术运算符算术运算符 算术运算符有、 *、 /、 MOD以及只能出现在表达式中的SHR和SHL运算符。其中, 、 、 *、 /是最常用的运算符, 要求参加运算的数(或地址)均为整数, 运算的结果也为整数, 除法运算的结果是商的整数部分。 MOD运算的结果是前一个操作数除以后一个操作数得到的余数, 如15 MOD 2的结果为1。 第五章 基本汇编语言 出现在表达式中的SHR和SHL运算符其使用时的格式为: 表达式SHR次数或表达式SHL次数。其

15、作用是在汇编时将表达式的值右移或左移指定的次数,然后作为一个操作数。例如: C EQU 4 MOV AX, C SHL 4汇编后相当于 MOV AX, 1000000B 第五章 基本汇编语言 尽管算术运算符可以用在数值表达式或地址表达式中, 但在具体使用时仍要注意运算结果的物理意义是否正确。例如, 两个地址相除是无意义的,两个不同段的段基址相加、减是无意义的。另外还要注意运算对象的正确性,如: MOV AX, DX SHL 2指令中的第2个操作数项DX SHL 2是非法的,因为DX不能存放偏移地址。若DAT为已定义过的某个字节的符号, 那么MOV BL,DAT1指令中的第2个操作数是正确的,它

16、表示要将DAT单元的地址加1,然后再将该数取出来传送给BL寄存器。 第五章 基本汇编语言 5.2.2 逻辑运算符逻辑运算符 逻辑运算符依次为NOT, AND,OR和XOR。 逻辑运算是按位进行操作的,位与位之间没有进位和借位。其中,NOT运算符是单操作数运算符,其余三个运算符是双操作数运算符。提请读者注意的是,出现在表达式中的上述运算符不是指令,运算符指定的运算是在汇编时完成的, 而指令是在程序运行时完成的。 例如: MOV AL, NOT 0F0H MOV BH, 0F0H AND 0FH 第五章 基本汇编语言 上述两条指令汇编后与下面两条指令等效: MOV AL, 0FH MOV BH,

17、0 第五章 基本汇编语言 5.2.3 关系运算符关系运算符 关系运算符有六种,它们用于两个表达式值的比较,表达式的值一定是常数或是同一段内的偏移地址,比较的结果为逻辑值,关系成立, 结果为真, 用全“1”表示。 反之结果为假, 用全“0”表示。 六种关系运算符分别是: 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

18、AL, 0 MOV DH, 0FFH 若有两个数据类型相同的符号地址X和Y,在DB伪指令中, 则 V DB X GT Y 汇编时,当X的偏移地址大于Y的偏移地址时,变量V的内容为0FFH,反之其内容为0。 第五章 基本汇编语言 5.2.4 数值返回运算符数值返回运算符 数值返回运算符有五种,这些运算符的运算对象必须是变量或标号,其运算结果是变量或标号的特征值(类型属性值)或是它们对应的内存单元地址(段基址或段内偏移地址)。 带有上述运算符的表达式, 其格式可统一表示为: 运算符变量名或标号 下面介绍五种数值返回运算符。 第五章 基本汇编语言 1. OFFSET运算符运算符 当OFFSET运算符

19、置于变量或标号前时,汇编程序就自动计算出该变量或标号在它段内的偏移地址。 例如: BUFFER DW 34, 56, 67912 MOV SI, OFFSET BUFFER 汇编程序按OFFSET运算符的功能,取得BUFFER在数据段内的偏移地址。作为MOV指令的立即数,当程序运行到该语句时, SI寄存器的内容就是变量BUFFER的段内偏移地址。 第五章 基本汇编语言 2. SEG(Segment)运算符)运算符 当SEG运算符置于变量或标号前面时,汇编程序按SEG运算符的功能,取得了变量或标号所在段的段基址。 例如:想得到变量X的段基址并存放到AX寄存器, 可用指令 MOV AX, SEG

20、X 上述指令执行后, AX寄存器的内容即为变量X的段基址。 第五章 基本汇编语言 3. TYPE运算符运算符 当TYPE运算符置于变量前面时,汇编程序按TYPE运算符的功能,取得变量的类型数字,该数字表示该变量所分配的存储单元(字节)数。即类型属性为BYTE的变量返回值为1, 类型属性为WORD的变量,返回值为2, 类型属性为DWORD的变量, 返回值为4。 当TYPE运算符置于标号前面时,汇编程序按其功能,返回标号的类型属性值;当该标号为NEAR属性时,返回值为-1, 标号为FAR属性时,返回值为-2。 例如: 第五章 基本汇编语言 DATA DW 75H, 134H ADD SI, TYP

21、E DATA上述的加法指令, 在汇编后相当于指令ADD SI, 2。 第五章 基本汇编语言 4. LENGTH运算符运算符 LENGTH运算符只对变量起作用,汇编程序对该运算符返回的值表示该变量所分配的元素个数。若变量使用重复数据操作符DUP说明,则返回外层DUP操作符前面的数值。若变量没有使用DUP操作符说明,则返回值为1。例如: A1 DB ABCD A2 DW 10H DUP(1) MOV AL, LENGTH A1MOV CX, LENGTH A2 第五章 基本汇编语言 上述两条指令在汇编后相当于指令: MOV AL, 1MOV CX, 10H 第五章 基本汇编语言 5. SIZE运算

22、符运算符 SIZE运算符仅对变量起作用,汇编程序对该运算符返回的值表示该变量所分配的总字节数,此数是该变量的LENGTH值和TYPE值的乘积。 例如:上例中的A2变量,若想知道它分配的总字节数, 可用下述指令表示: MOV CX, SIZE A2汇编后相当于有指令: MOV CX, 20H即变量A2总共分配有20H个字节数。 第五章 基本汇编语言 5.2.5 属性修改运算符属性修改运算符 1. PTR(Pointer)运算符)运算符 格式: 类型 PTR 地址表达式其中,表达式的形式可以是标号、变量或是用作地址偏移量的寄存器。PTR运算符的作用是将地址表达式的原类型属性临时修改成PTR运算符前

23、面所指定的类型。指定的类型可以是 BYTE、WORD或DWORD。注意PTR运算符只在语句内有效。 例如:要将一个立即数20H存入以SI寄存器内容所指定的内存单元,那么SI所指向的单元是字节单元还是字单元,就可以使用PTR运算符加以说明。 第五章 基本汇编语言 MOV BYTE PTRSI, 20H或 MOV WORD PTRSI, 20H 第一条指令表示目的操作数是字节单元,第二条指令表示目的操作数是字单元。 指令 JMP FAR PTR SUB 表示标号SUB不在转移指令的同一段内。即这条指令可使程序转向另一代码段。 DAB DB 12H, 34H MOV AX, WORD PTR DAB

24、 上述传送指令的源操作数由于使用了PTR运算符将DAB的类型属性修改成WORD类型,因此,执行该指令时是取2个字节的数送给寄存器AX的。 第五章 基本汇编语言 2. SHORT运算符运算符 格式: SHORT 标号 SHORT运算符用来说明JMP指令中转移地址的属性是短属性,即转移的范围比较小,其转向地址是在JMP的下一条指令地址IP值上加上一个字节的偏移量, 即转移范围在(IP)+127(IP)-128之间。 例如: JMP SHORT NEXT NEXT: 第五章 基本汇编语言 3. THIS运算符运算符 格式: THIS 属性或类型 THIS运算符和PTR运算符相似, 它可以建立一个指定

25、类型或指定距离的地址操作数。当建立一个指定类型的地址操作数时,该操作数的段基址和段内偏移地址与下一个存储单元地址相同。 例如: NEWTYPE EQU THIS BYTE WORDTYPE DW 10H, 2356H 第五章 基本汇编语言 汇编后建立一个新的地址操作数NEWTYPE,并且它的段基址,段内偏移地址和WORDTYPE相同,但前者是字节类型的,后者是字类型的。根据需要可以选择其中的符号地址,取一个字节的数据用符号地址NEWTYPE,取一个字的数据用符号地址WORDTYPE。 THIS运算符也可以建立一个指定距离属性的指令标号。 例如: BEGIN EQU THIS FARMOV CX

26、, 0 汇编后,MOV指令有一个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。 以上分别讨论了五大类运算

27、符,当一个表达式中出现多种运算符时,应先计算优先级别高的运算符,对优先级相同的运算符则应从左到右进行计算。 括号可用来改变计算次序,括号内的表达式应先计算。 运算符的优先级别见表5 - 1(本书未提及的运算符可查阅有关手册)。 第五章 基本汇编语言 表表 5-1 运算符的优先顺序运算符的优先顺序 第五章 基本汇编语言 5.3 伪指令语句伪指令语句 伪指令语句简称伪指令。伪指令是汇编语言程序设计的一个重要部分。程序员可以使用伪指令向汇编程序发出某些控制和操作指示,在汇编过程中完成相应的工作。伪指令与机器指令的最大区别是:伪指令由汇编程序解释后完成相应的操作, 汇编后不产生目的代码,经过汇编后得到

28、的目的码程序中,伪指令已不复存在。机器指令语句一定有对应的目的代码,并由汇编程序翻译成机器代码,只能在程序运行时才能由CPU完成其操作。尽管不同的汇编程序提供有不同的伪指令,但绝大部分伪指令都相互兼容。 第五章 基本汇编语言 目前国内比较流行的汇编程序是Microsoft的MASM5.0版本, 它最高能支持80386和80387处理器,并且比MASM1.0至MASM4.0的汇编和链接速度更快。而MASM6.0是微软公司1991推出的宏汇编程序, 它对MASM进行了重新组织,提供了许多新的伪指令、高级语言控制结构及许多新的数据类型, 更重要的是: 它能支持80486的汇编语言程序设计。 第五章

29、基本汇编语言 表表 5-2 伪伪 指指 令令 分分 类类 第五章 基本汇编语言 5.3.1 数据定义伪指令数据定义伪指令 数据定义伪指令的主要功能是负责为变量分配内存单元, 也可以预置初值,或预留内存单元。 常用的伪指令有DB, DW, DD, DQ和DT。 伪指令的格式为: 变量名 伪指令名 操作数项表其中,变量名为可选项,伪指令名可以是上述五种伪指令之一, 操作数项表表示操作数可由多个操作数组成。 操作数的形式可以是常数、表达式、字符串、?或带DUP的表达式。第五章 基本汇编语言 不同伪指令为变量分配的内存单元有: D1 DB 操作数项表 ; 每项分配1个字节D2 DW 操作数项表 ; 每

30、项分配2个字节D3 DD 操作数项表; 每项分配4个字节D4 DQ 操作数项表 ; 每项分配8个字节D5 DT 操作数项表 ; 每项分配10个字节 第五章 基本汇编语言 1 操作数为常数或表达式操作数为常数或表达式 数据定义伪指令可以为变量预置常数值或表达式值。例如: D1 DB 30H, 30 ; 变量D1的内容为30H, 它的下一个字节单元的内容为30D D2 DW 25*25 ; 变量D2的内容是625D D3 DD 12345678H ; 变量D3的内容是12345678H D4 DB 15, 45 MOD 5 ; 变量D4的内容为15, 它的下一个字节单元的内容为0 第五章 基本汇编

31、语言 2 操作数为字符串操作数为字符串 当使用DB伪指令, 而操作数为字符串时,必须以单引号括起来,括起来的字符个数不能超过255个,字符串将以ASCII码的形式按地址递增的顺序依次存放在以变量名开始的内存单元中。例如: ST DB THIS IS A STRING 第五章 基本汇编语言 3 操作数为?操作数为? ?用于为变量预留内存单元。 例如: X1 DB ? ; 为变量X1预留1个字节单元X2 DW ?; 为变量X2预留2个字节单元X3 DD ?; 为变量X3预留4个字节单元 第五章 基本汇编语言 4 操作数为带操作数为带DUP(Duplication)的表达式的表达式 当数据定义时有多

32、个相同操作数项或要预留多个内存单元时,采用带DUP的表达式进行定义非常方便、 简捷。 DUP在汇编语言中称为重复定义操作符,DUP操作符的使用格式为: 表达式 DUP(操作数项)其中,表达式的值表示要重复定义的次数, 操作数项表示要重复的内容, 操作数项的形式仍为上述四种形式。 例如: 第五章 基本汇编语言 V1 DB 20 DUP(?) ;表示从V1开始预留20个字节V2 DW 4 DUP(3, 5) ; 表示从V2开始重复定义 4 个字, 由低到高, 第一个字为3, 第二个字为5, 第三个字为3, 第四个字为5V3 DB 5 DUP(3 DUP(2), 7) ; 表示从V3开始重复定义5个

33、数据系列“2, 2, 2, 7”, 共占用20个字节单元V4 DB 10 DUP(ABCD) ; 表示从V4开始重复定义10个字符 串“ABCD”, 共占用40个字节单元 第五章 基本汇编语言 5.3.2 段定义伪指令段定义伪指令 段定义伪指令主要用于将源程序划分为若干段,指出段的用途,便于汇编程序在相应的段下生成目的代码,也可经过连接程序将不同模块的同名段予以合并,生成一个结构更紧凑的可执行目标程序。段定义伪指令由SEGMENT和ENDS伪指令组成, 段定义的格式为: 段名 SEGMENT 定位类型 组合类型 类别名本段语句系列 段名 ENDS 第五章 基本汇编语言 段定义伪指令的作用是定义

34、一个逻辑段,其中,段名由用户指定,一个段开始与结束使用的段名应一致。SEGMENT表示段定义开始的伪指令,ENDS(End of Segment)表示段结束伪指令。 段定义伪指令后面的三个可选项,指明段的属性,各可选项之间用空格分隔。 以下分别介绍三个属性。 第五章 基本汇编语言 1 定位类型定位类型 定位类型表示对当前定义的段的起始地址的要求, 可有五种选择: (1) PAGE 表示本段的起始地址(段基址)的低 8 位为 00H, 即段基址一定能被 256整除。 (2) PARA 表示本段的起始地址(段基址)的最低 4 位为 0000B,即段基址一定能被 16 整除。 (3) DWORD 表

35、示本段的起始地址(段基址)的最低两位为 00B,即段基址一定能被 4 整除。 (4) WORD 表示本段的起始地址(段基址)的最低位为 0, 即段基址一定是偶数。 (5) BYTE 表示本段的起始地址(段基址)可从任一地址开始。 第五章 基本汇编语言 2 组合类型组合类型 组合类型用于指定段与段之间的连接关系及段的定位。 常用的组合类型有: (1) PUBLIC 在满足定位类型的前提下,本段与其它的同名段连接在一起,其连接的顺序由连接命令指定。 (2) COMMON 本段与其它同名的分段在连接时有相同的起始地址,因此会产生一个覆盖段,覆盖段的长度是参与覆盖的各个分段中长度为最长的段的段长。 第

36、五章 基本汇编语言 (3) STACK 将所有同名段连接成一个连续段,作为堆栈段,汇编程序自动将段寄存器SS初始化为该连续段的首址, 并初始化堆栈指针SP。 (4) AT表达式 表示本段的起始地址是由表达式计算出来的16 位段基址。 (5) MEMORY 表示本段将分配在与之连接在一起的其它段的最高地址。若连接时有多个指定的MEMORY段,则把第一个遇到的段作为MEMORY段, 其它作COMMON段处理。 第五章 基本汇编语言 3 类别名类别名 类别名由用户指定, 且必须用单引号括起来。连接时, 连接程序将类别名相同的段依次连续存放在内存中,若这些段未选择PUBLIC, COMMON组合类型,

37、 则这些段仍然是不同的段。 第五章 基本汇编语言 5.3.3 段寻址伪指令段寻址伪指令 段寻址伪指令主要用于指示汇编程序哪些段是当前段以及这些段与段寄存器之间的联系。 段寻址伪指令格式为: ASSUME 段寄存器名: 段名, 段寄存器名: 段名, 其中,段寄存器名是CS、 SS、DS、ES中的一个,段名是指用SEGMEN和ENDS伪指令中定义的段名。 第五章 基本汇编语言 需要注意的是:ASSUME伪指令只是指定当前段与段寄存器之间的联系,并不能将段基址装入相应的段寄存器,因此, 在代码段中还应通过若干个语句将段基址装入相应的段寄存器中。 例如: DATA1 SEGMENT ; DEFINE

38、DATA SEGMENT DATA1 ENDSDATA2 SEGMENT; DEFINE EXTRA SEGMENT DATA2 ENDSSTACKS SEGMENT PARA STACK ; DEFINE STACK SEGMENT 第五章 基本汇编语言 DB 200 DUP(?)STACKS ENDSCODESEGMENT ; DEFINE CODE SEGMENTASSUME DS: DATA1, ES: DATA2, SS: STACKS, CS: CODESTART: MOV AX, DATA1 MOV DS, AX MOV AX, DATA2 MOV ES, AXCODE ENDS

39、END START 第五章 基本汇编语言 上述程序的代码段中,通过四条传送指令分别将数据段的段基址装入数据段寄存器DS和附加段寄存器ES中。CS和IP由汇编程序自动装入, 其中符号地址START的段基址装入CS, 符号地址START的段内偏移地址装入IP中。 由于堆栈段的定义中使用了STACK组合类型,因而汇编程序自动将堆栈段段基址装入SS中, 将堆栈长度(字节数)200装入堆栈指针SP中。 第五章 基本汇编语言 5.3.4 过程定义伪指令过程定义伪指令 过程定义伪指令用于定义子程序, 其格式为: 过程名 PROC 属性 RET过程名 ENDP 其中,伪指令PROC表示过程开始,ENDP表示过

40、程结束。 过程名(子程序名)由用户指定。 过程定义伪指令将在本书第八章中介绍。 第五章 基本汇编语言 5.3.5 定位伪指令定位伪指令 汇编程序在汇编源程序时,使用汇编地址计数器记载正在汇编的数据或指令的目的代码在当前段内的偏移地址。汇编地址计数器的值可用符号表示。用户可在程序中直接使用, 表示引用当前汇编地址计数器的值。 定位伪指令用于指定汇编地址计数器的值。 定位伪指令的格式为: ORG 表达式 第五章 基本汇编语言 该伪指令执行的结果是:将表达式的值赋给汇编地址计数器,表达式中可以包括当前汇编地址计数器的值,表达式的值必须为正数。ORG伪指令可用在数据定义语句或指令语句的前面。ORG伪指

41、令后的数据或指令代码以表达式的值作为初始的段内偏移地址。 例如: DATA SEGMENT ORG 10H X DB 30H,40H ORG $+10 Y DB 50H,60HDATA ENDS 第五章 基本汇编语言 CODE SEGMENT ASSUME CS: CODE, DS: DATA ORG 20HSTART: MOV AX, DATA MOV DS, AX CODE ENDS END START 第五章 基本汇编语言 在上例中,变量X在数据段内的偏移地址为 10H,变量Y在数据段内的偏移地址为+10。因为在X变量定义结束后汇编地址计数器的值为 12H, 所以变量Y在数据段内的偏移地

42、址为 1CH。 而代码段中第一条MOV指令的标号START其偏移地址为 20H, 即该MOV指令从CODE段的偏移地址 20H开始存放。 第五章 基本汇编语言 5.4 指令语句指令语句 5.4.1 80286 CPU增加与增强的指令增加与增强的指令 1 新增加的第一类指令新增加的第一类指令 (1) 字符串输入指令。 指令格式: INS ES: 目的地址偏移量, DX INSB ; 操作数缺省 INSW ; 操作数缺省 第五章 基本汇编语言 上述三条指令均要求从指定的端口输入一串或一个字符到指定的内存单元中。 第一条指令要求指出内存单元的地址,端口地址要预先送入DX中,该指令一旦执行,可将由DX

43、指定的端口中输入一串字符到指定的连续内存单元中。 第二、三条指令, 操作数均为缺省,但在指令执行前, 必须将端口地址送DX,内存单元的段基址和段内偏移地址分别送入ES和DI中。第二条指令只能从端口取一个字符, 第三条指令可以从端口取二个字符。 第五章 基本汇编语言 (2) 字符串输出指令。 指令格式: OUTS DX, 段基址: 源地址偏移量 OUTSB ; 操作数缺省 OUTSW ; 操作数缺省 上述三条指令实现的功能与字符串输入指令的功能相反, 即将指定的内存单元中的字符或一个或二个输出到由DX指定的端口中。其中,第二、三条指令的操作数均为缺省。字符的内存单元地址必须由DS: SI预先指定

44、。 第二条指令只从该地址取一个字符输出到DX指定的端口, 第三条指令是从该地址开始取两个字符输出到DX指定的端口中。 第五章 基本汇编语言 (3) 堆栈操作指令。 指令格式: PUSHA POPA 上述二条指令是 80286 新增加的堆栈操作指令。 第一条指令的功能是将所有的通用寄存器的内容压入堆栈,第二条指令的功能是将原先压入堆栈的通用寄存器内容弹出堆栈,并将它们分别送入相应的寄存器内。 第五章 基本汇编语言 (4) 内存范围检查指令。它是 80286 新增加的指令。 指令格式: BOUND REG, MEM 该指令用于检查REG指明的寄存器的值, 是否在一定的内存区间内,若在,则可以使用该

45、寄存器,若不在,系统自动产生类型 5 的中断。 类型 5 的中断处理程序须由用户自己编写。 若该内存区间存放一个数组。 寄存器是数组的地址指针,则通过上述指令可以知道数组的地址是否越界。使用该指令前应先将MEM定义为双字,确定数组边界后,才能使用该指令,从而达到上述目的。 第五章 基本汇编语言 (5) 建立一个堆栈的指令。 它是 80286 新增加的指令。 指令格式: ENTER IMM1, IMM2 该指令中IMM1 表示要建堆栈的空间大小,为一个 16 位的常量; IMM2 表示过程嵌套的层数。该指令主要用于过程调用前先建立一个堆栈,以便过程调用,返回时存取参数和局部变量。 第五章 基本汇

46、编语言 (6) 撤消堆栈的指令。它是 80286 新增加的指令,它的作用与ENTER相反。 指令格式: LEAVE 该指令无操作数, 它用于撤消由ENTER指令建立的堆栈, 并退出。 第五章 基本汇编语言 (7) 带符号整数乘法指令。 它是 80286 功能增强的指令。 指令格式: IMUL REG, IMM IMUL REG, OPRD, IMM 上述二条指令中, REG可以是通用寄存器, IMM表示立即数, 数的范围-32 768+32 767 之间,OPRD是第二操作数, 该数可以是寄存器或存储器中的内容。 乘积的结果均在REG中且积为16位的有符号数,超过部分自动丢弃。例如: IMUL

47、 DX, 5IMUL AX, BX, 3 IMUL CX, DATY, 8 第五章 基本汇编语言 (8) 移位指令。 它是 80286 功能增强的指令, 80286 对 8088/8086 所有移位指令的移位次数的写法进行改进,允许将移位次数(131)直接书写。避免当移位次数大于1时, 必须使用CL寄存器表示的限制。例如: SHL DX, 5RCR SI, 6 第五章 基本汇编语言 2 新增加的第二类指令新增加的第二类指令 这类指令只能在 80286 保护方式下使用,仅用在操作系统及其它控制软件中,主要用于多任务、多用户的程序设计, 对一般的程序设计使用不多, 这里仅作简单介绍。 这类指令主要

48、用来将 80286、80386 或 80486 内部寄存器的值存入内存, 或将数值存入内部寄存器。这些指令分别是: LAR REG, OPRD 装入访问权限 LSL REG, OPRD装入段界限 第五章 基本汇编语言 上述两条指令中的OPRD, 可以是寄存器或内存单元。 LGDT MEM装入全局描述符表 SGDT MEM存储全局描述符表 LIDT MEM装入中断描述符表 SIDT MEM存储中断描述符表 LLDT OPRD装入局部描述符表 SLDT OPRD存储局部描述符表 LTR OPRD装入任务寄存器 STR OPRD存储任务寄存器 LMSM OPRD装入机器标志字 SMSM OPRD存储

49、机器标志字 ARPL OPRD, REG调整已请求特权级别 CLTS清除任务切换标志 VERR OPRD对存储器或寄存器读校验 VERW OPRD对存储器或寄存器写校验 第五章 基本汇编语言 5.4.2 80386 CPU增加与增强的指令增加与增强的指令 1 80386 新增加的指令新增加的指令 (1) 测试与位操作指令。 这类指令可用于对指定的位进行测试或既测试又进行位操作(取反, 置 0, 置 1)。 这类指令有BT指令, 其指令格式为: BT REG, REGBT REG, IMMBT MEM, REGBT MEM, IMM BT指令的功能是:按源操作数指出的测试位测试目的操作数中的相应

50、位,并将该位的值复制到进位标志位中。 第五章 基本汇编语言 BTC指令,其指令操作数的格式同BT指令。该指令的功能是:按源操作数指出的测试位测试目的操作数中的相位数, 将该位的值复制到进位标志位中,然后再将目的操作数的相应位取反。 BTR指令,其指令操作数的格式亦与BT指令相同。 该指令的功能是:按源操作数指出的测试位测试目的操作数的相应位, 将该位的值复制到进位标志位中, 然后再将目的操作数的相应位置 0。 BTS指令, 其指令操作数的格式亦与BT指令相同。 该指令的功能是:按源操作数指出的测试位测试目的操作数的相应位,将该位的值复制到进位标志位中,然后再将目的操作数的相应位置 1。 第五章

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|