汇编与接口伪指令_第1页
汇编与接口伪指令_第2页
汇编与接口伪指令_第3页
汇编与接口伪指令_第4页
汇编与接口伪指令_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第四章 伪指令本章学习要点: 首先要认识伪指令,了解伪指令的作用,初步掌握伪指令的使用方法。通过下一章的编程练习逐步熟练掌握伪指令在程序设计中的使用方法。本章主要学习内容有: 1、数据单元定义伪指令 2、段定义伪指令 3、过程定义伪指令 4、汇编语言程序格式 伪指令? 使用编辑程序编写的原程序文件不能在机器上直接运行,必须将它“翻译”成计算机能够识别的二进制代码,这个“翻译”过程是由汇编程序(MASM)完成的。它提供了一些“规则”,我们要尊照这些“规则”去编写原程序。 在原程序中除了指令语句以外还有伪指令语句,伪指令语句用来告诉汇编程序在汇编期间需要做的一些工作,如数据定义、分配存储区、指示

2、程序结束等等,这些都是通过伪指令语句完成的。 伪指令与机器指令不同的地方在于伪指令本身不产生任何目标代码,也不象机器指令那样在机器运行期间由计算机来执行,它仅在汇编期间起作用。程序 一、定义数据存储单元伪指令 这类伪操作的语句格式为: 名字 伪指令 操作数 ;注释 名字是一个任选项,用符号地址表示,其作用与指令语句前的标号相同,但在它的后面不使用冒号“:”。注释字段也是可有可无的,它用来说明该伪操作的功能。操作数字段可以是常数,也可以是表达式。 下面举例说明: 例4.1 操作数是常数 DA_BYTE DB 50H,50;50 32 DA_WORD DW 0A34H,4981H ;34 0A 8

3、1 49 变量名 伪指令 操作数 注释项程序 例4 .2 操作数是表达式(根据该表达式可以求得一个常数) DA_B DB 3+2,2AH ;05 2A DA_W DW 2BH,6*2 ;2B 00 0C 00例4 .3 操作数为?号,表示可预置任何内容。 DA_B DB ?,? DA_W DW ?,?例4 .4 操作数为字符串 存储格式(左边为较低地址单元) STRING1 DB ABCD;41 42 43 44 STRING2 DW AB,CD;42 41 44 43 STRING3 DD AB,CD;42 41 00 00 44 43 00 00注意: STR_ERR1 DW ABCD;非

4、法操作 STR_ERR2 DD ABCD;非法操作 例45 带DUP的操作数,DUP(Duplication)是定义重复数据操作符。 D_B1 DB 20H DUP(?) D_B2 DB 10H DUP(ABCD) D_W1 DW 5H DUP(4)例46 变量名的引用方法 DA1 DB 0FEH DA2 DW 52ACH TABDB10HDUP(?) MOV AL,DA1 MOV BX,DA2 MOV TABSI,AL 二、符号赋值伪指令 在编制源程序时,常把某些常数、表达式等用一特定符号来表示。这样,为编写程序带来许多方便。为此,就要使用符号定义语句,这种语句有以下两种。 1、赋值语句 格

5、式: 符号 EQU 表达式 功能:把表达式的值或符号赋给EQU左边的符号。 表达式有以下三种: (1)常数或数值表达式,例如: COUNT EQU 5 NUM EQU 1354 (2)地址表达式,例如: ADR1 EQU BP+14 (3)变量、标号或指令助记符等,例如: CREG EQU CXCBD EQU DAAL1 EQU SUB_START 赋值语句仅在汇编源程序时,作为替代符号用,不产生目标代码,也不占有存储单元。 在同一源程序中,同一符号不能用EQU伪指令重新定义。 例如: NUM EQU 10H NUM EQU 20H ;因符号重新定义而出现语法错误 2、等号语句 语句格式: 符

6、号 = 表达式 该语句功能与赋值语句相同。但等号语句允许重新定义。例如: CONT 5 NUM l4H NUM NUM10H CBD DAA CBD ADD 三、段定义伪指令(SEGMENTENDS伪指令) 当程序中需要设置一个段时,就必须首先使用段定义伪指令。它的格式为: 段名SEGMENT 定位类型组合类型类别名 ;本段语句序列(程序或数据) 段名ENDS 例如: STACK1 SEGMENT PARA STACK STACK STACK1 ENDS 每一个段都是以SEGMENT伪指令开始,以ENDS伪指令结束。其中: 1、段名: 由用户自己选定,通常使用与本段用途相关的名字。如第一数据段

7、DATA1,第二数据段 DATA2,堆栈段STACK,代码段 CODE等。一个段开始与结尾用的段名应一致 。程序 2、定位类型: 这个定位类型表示对段的起始边界要求。可有四种选择:(1)PAGE(页):表示本段从一个页的边界开始。一页的长度为 256 个字节,所以段起始地址(段基址)的最后八位二进制数一定为 0,即以 00H 结尾的地址。(2) PARA(节):如果定位类型用户未选择,则隐含为 PARA。它表示本段从一个节的边界开始,一个节长度为 16 个字节。所以段的起始地址(即段基址)最后四位二进制数一定是 0,即以 0H 结尾的地址。 如: 09150H,0AB30H 等。(3) WOR

8、D(字):表示本段从一个偶字节地址开始。即段起始单元地址的最后一位二进制数一定是以 0,2,4,6,8,A,C,E结尾的地址。(4) BYTE(字节):表示本段起始单元可从任一地址开始。 3、组合类型: 组合类型指定段与段之间是怎样连接和定位的,共有六种选择: (1)NONE:这是隐含选择。表示本段与其它段无连接关系。在装入内存时本段有自己的物理段,因而有自己的段基址。 (2)PUBLIC:在满足定位类型的前提下,本段与同名的段相邻地连接在一起,形成一个新的逻辑段,公用一个段基址,所有偏移量调整为相对于新逻辑段的起始地址。 (3)COMMON:产生一个复盖段。在两个模块连接时,把本段与其它用C

9、OMMON说明的同名段置成相同的起始地址,共享相同的存储区。共享存储区的长度由同名中最大的段确定。 (4) STACK:把所有同名的堆栈段连接在一起,形成一个连续段,且系统自动对 SS 段寄存器和堆栈指针 SP 初始化。建议在用户程序中堆栈段要用组合类型 “STACK” 说明过,否则需要用户程序自已初始化 SS 和 SP。 (5)AT表达式:表示本段可定位在表达式所指示的节边界上。 如: AT 0930H, 那么本段的段地址为 0930H。 注意:不能用它指定代码段。(6)MEMORY:表示本段在存储器中应定位在所有其他段的最高地址。如有多个 MEMORY,则只把第一个遇到的段当作 MEMOR

10、Y 处理,其余的同名段均按 PUBLIC 说明处理。4、类别名 类别名必须用单引号()括起来。在连接时,LINK 程序把类别名相同的所有段存放在连续的存储区内。类别名可以是任何字符串组成的名字。但是它不能再作程序中的标号、变量名或其它定义符号。 以上定位类型、组合类型和类别名三个参数项是任选的,可以只选其中一个或两个参数项,但是不能交换它们之间的顺序。各参数项之间用空格分隔。 四、段寻址伪指令 Assume Assume 伪指令用于指示汇编程序,已定义的段与段寄存器之间的对应关系。Assume 伪指令不产生任何目标代码。 格式: ASSUME 段寄存器名:段名,段寄存器名:段名, 其中段寄存器

11、名是指四个段寄存器 CS,SS,DS,ES 中的一个,段名是指用 SEGMENTENDS 伪指令语句中定义的段名。段寄存器名与段名之间必须用冒号 “:”。例如: ASSUME CS:CODE,DS:DATA,SS:STACK 程序 五、过程定义伪指令(PROCENDP) 在程序设计中,我们常常把具有一定功能的程序段设计成一个子程序。MASM 宏汇编程序用“过程”(PROCEDUR)来构造子程序。过程定义伪指令格式如下: 过程名 PROC(NEAR FAR) RET 过程名 ENDP 其中,过程名不能省略,且过程的开始(PROC)和结束(ENDP)应使用同一个过程名,它是该子程序的程序名,也是过

12、程调用指令 CALL 的目标操作数。它类同一个标号的作用,也有段,偏移量和类型这三个属性。过程的类型有 NEAR 和 FAR两种属性。在定义过程时,如没有选择类型,则隐含为 NEAR。程序 六、定位伪指令(ORG)和当前位置计数器($) 在汇编程序时,为了指示下一个数据或指令在相应段中的偏移量,汇编程序使用了一个当前位置计数器,用于记载汇编时的当前偏移量。符号“$”就是代表当前位置计数器的现行值。 格式为: ORG 表达式 其作用是把表达式的值赋位给当前位置计数器,即ORG语句后的指令或数据以表达式给定的值作起始偏移量。其中表达式的值是以 65536 为模的正数。例如: DATA SEGMEN

13、T ORG 30H BUF DW 12H,34H ;变量 BUF 在 段内的偏移量为 30 H COUT EQU ( $BUF)/2 ;利用偏移量求差得到数据的个数 DATA ENDS 4. 2 汇编语言程序格式 汇编语言源程序中的每个语句可以由四项组成,格式如下: 标识符 操作项 操作数项 ;注释项 其中:标识符项是一个符号,是可选项。操作项是一个操作码的助记符,它可以是指令、伪操作或宏指令名。操作数项可由一个或多个表达式组成,它提供执行该操作所需要的数据信息。注释项用来说明程序或语句的功能,注释项必须以分号 “;” 开始。 例如: AA : ADD AX,BX ;加法运算 标识符 操作项

14、操作数项 注释项 一、标识符 标识符可以是标号,也可以是变量名,它们都用来表示本语句的符号地址。 标识符的组成规则如下: 字符个数为:131个;第一个字符必须是字母、 ?、 或 _ ; 从第二个字符开始,可以是数字、字母、?、 或 _ ; 不能使用系统专用保留字,保留字主要有:寄存器名(如:AX,CS)指令助记符(如:MOV,ADD)伪指令(如: SEGMENT,DB)表达式中的运算符(如: GE,EQ)属性操作符(如: PTR,FAR) 1、标号: 标号在代码段中定义,后面跟冒号 “ : ” ,它可以是符号地址或过程名。标号常用作转移指令或 CALL 指令的操作数,用以表示转向地址。 标号有

15、三种属性:段、偏移及类型。 段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在 CS 寄存器中。 偏移属性:标号的偏移地址是16位元符号数,它代表从段起始地址到定义标号的位置之间的字节数。 类型属性:用来指出该标号是在本段内引用还是在其它段中引用的。如在段内引用的,则称为 NEAR,指针长度为 2 字节;如在段外引用,则称为 FAR,指针长度为4字节。 2、变量:变量在除代码段以外的其它段中定义,后面不跟冒号。 如: VAR DW 12H,34H 变量多用于操作数字段,它有段、偏移量及类型三种属性。 段属性: 定义变量的段起始地址,此值必须放在一个段寄存器中。 偏移属性

16、:变量的偏移地址是16位无符号数,它代表从段的起始 地址到定义变量的位置之间的字节数。 类型属性:变量的类型属性定义该变量所保留的字节数。 如:BYTE、WORD、 DWORD 注意:在程序中同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。 二、操作项 操作项可以是指令、伪操作或宏指令的助记符。对于指令,汇编程序将其翻译为机器语言。对于伪操作,汇编程序将根据伪指令要求的功能进行处理。三、操作数项 操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。对于指令,操作做项一般给出操作数地址,操作数可能有一个、二个或一个也没有。对于伪操作则给出它们所要求的参数。 操作数项可以

17、是常数、寄存器、标号、变量或由表达式组成。表达式是由常数、标号、变量与一些操作符的组合,有数字表达式和地址表达式两种。在汇编期间,汇编程序按照一定的优先规则对表达式进行计算后可得到一个数值或一个地址。下面我们介绍一些常用的操作符。 1、算术操作符 算术操作符有(正)、 (负)、 、 、* 、/ 、MOD、SHR、SHL等。其中 MOD 是指除法运算后得到的余数。如 197 的商是 2,余数为 5,因此 19 MOD 7 的值是 5(余数)。 例:数组 ARRAY 定义如下,写出把数组长度(字数)存入 CX 寄存器的指令。 ARRAY DW 1,2,3,4,5,6,7 COUN DW ? MOV

18、 CX,(COUN ARRAY)/ 2经汇编程序汇编后的 MOV 指令变为: MOV CX,7 2、逻辑操作符 逻辑操作符有 AND、OR、XOR 和 NOT 四种,逻辑操作符是按位进行操作的。 例如: MOV DX,55H AND 0FEH 汇编后: MOV DX,54H 该指令在汇编时由汇编程序对指令中的表达式进行“与”运算得到一个常数,而在程序运行时,该指令的操作则是把表达式的计算结果保存到 DX 寄存器中。 3、关系操作符 它有EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)六种。 关系操作符的两个操作数必须都是数字或是同一段内的两个存储器

19、地址。计算的结果应为逻辑值:结果为真,用 0FFFFH 表示;结果为假,用 0 表示。例如: MOV BX,(PORT_VAL LT 5)AND 20)OR(PORT_VAL GE 5)AND 30) 当 PORT_VAL5 时,汇编结果为: MOV BX,20 当 PORT_VAL 5 时,汇编结果为: MOV BX,30 4、 数值回送操作符 它有 TYPE、LENGTH、SIZE、OFFSET、SEG 5 种。这些操作符把一些特征或存储器地址的一部分作为数值目送。下面分别说明各个操作符的功能。 (1)TYPE 格式为: TYPE 变量/标号 如果是变量,则汇编程序将回送该变量用字节数表示

20、的类型:DB为1,DW为2,DD为4,DQ为 8, DT为 10。 如果是标号,则汇编程序将回送代表该标号类型的数值: NEAR为1, FAR 为2。 例如: ARRAY DW 1,2,3 ADD SI,TYPE ARRAY ;注意:编程技巧 汇编后的加法指令为:ADD SI,2 (2)LENGTH 格式为: LENGTH 变量 在变量中使用 DUP 时,汇编程序回送分配给该变量的单元数。而对于其它情况则回送1。 例如: DA_1 DW 100 DUP(0) MOV CX,LENGTH DA_1 汇编后的 MOV 指令为: MOV CX,100 又如: ARRAY DW 1,2,3 MOV C

21、X,LENGTH ARRAY 汇编后的 MOV 指令为:MOV CX,1 (3)SIZE 格式为: SIZE 变量 汇编程序回送用 DUP 伪指令分配给该变量的字节数。此值是 LENGTH 值和 TYPE 值的乘积。 例: DA_1 DW 10 DUP(0) MOV CX,SIZE DA_1 汇编后的 MOV 指令为: MOV CX,20 (类型为2,长度为10) 例: ARRAY DW 1,2,3 MOV CX,SIZE ARRAY 汇编后的 MOV 指令为:MOV CX,2 (类型为2,长度为1) (4)OFFSET 格式为: OFFSET 变量/标号 功能: 汇编程序将回送变量或标号的偏

22、移地址值。 例如: MOV BX,OFFSET BUF ; BUF是变量名 MOV BX,OFFSET SUB_P ; SUB_P 是子程序名 等价于: LEA BX, BUF LEA BX,SUB_P (5)SEG 格式为: SEG 变量/标号 功能: 汇编程序回送变量或标号的段地址值。 例如:如果 DATA_SEG 是从存储器的 05000H(物理)地址开始的一个数据段的段名,BUF 是该段中的一个变量名,则: MOV BX,SEG BUF 汇编后为: MOV BX,500H;500H 是段地址 又如: MOV BX,SEG SUB_P 是将子程序的段地址送BX。 5、属性操作符 它有 P

23、TR、段操作符、SHORT、THIS、HIGH 和 LOW 6种。 (1)PTR 格式为: 类型 PTR 地址表达式 PTR用来建立一个符号地址,但它本身并不分配存储器,只是用来给已分配的存储地址赋予另一种属性,使该地址具有另一种类型。格式中的类型字段表示所赋予的新的类型属性,而表达式字段则是被取代类型的符号地址。 例如: BUF DW 1234H,5678H LEA SI,BUF MOV AL,BYTE PTRSI类型可有 BYTE、WORD、DWORD、NEAR 和 FAR 几种。 (2)段操作符 段操作符用来表示一个标量、变量或地址表达式的段属性。 例如,MOV AX,ES:BX+SI

24、(3)SHORT 用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的 127 个字节范围之内。 例如: JMP SHORT TA TA:MOV AX,2 (4)THIS 格式为: THIS 类型/属性 它可以象 PTR 一样建立一个指定类型( BYTE、WORD 或 DWORD)的操作数或指定距离(NEAR 或 FAR)的地址操作数。该操作数的段地址和偏移地址与下一个存储单元地址相同。例如: FIRST_TYPE EQU THIS BYTE WORD_TABLE DW 100 DUP(?) 此时 FIRST_BYTE 的偏移地址值和 WORD_TABLE 完全相同,但它是字节

25、类型的,而 WORD_ TABLE 则是字类型的。 (5)HIGH 和 LOW 称为字节分离操作符,它接收一个数或地址表达式,HIGH取其高位字节,LOW取其低位字节。例如: CONST EQU 1234H MOV AH,HIGH CONST 汇编程序将把 MOV 指令汇编成: MOV AH,12H 操作符的优先级别从高到低排列如下:1()、 、 中的项,然后是 LENGTH、SIZE、WIDTH、 MASK2 (结构变量后面的运算符)。3 PTR,OFFSET,SEG,TYPE,THIS 及段操作符4 HIGH 和 LOW5 乘法和除法:, MOD, SHL, SHR6 加法和减法:,7 关系操作: EQ, NE, LT, LE, GT, GE8 逻辑:NOT9 逻辑:AND10逻辑:OR,XOR11SHORT 四、 注释项 注释项用来说明一段程序或一条或几条指令的功能,它是可有可无的。但是,对于汇编语言程序来说,注释项的作用是很明显的,它可以使程序易于被读懂,因此编制汇编语言程序必须写好

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论