当前位置:首页 > 计算机三级PC技术分章节考试要点
资料下载
宏汇编中有三种运算符:算术运算符、逻辑运算和关系运算符。
1.算术运算符 算术运算符包括加(+)、减(-)、乘(*)、除(/)、模除(MOD)、左移(SHL)和右移(SHR)七种。+、-、*、/是常用的运算符,参加运算的数和运算结果均为整数。除法运算的结果取商的整数部分,而模除的运算结果只取它的余数。左移或右移运算符可使二进制数左移或右移若干位,相当于二进制数进行乘法或除法运算,因此也把它们作为算术运算符。 2.逻辑运算符
逻辑运算符包括AND(与)、OR(或)、XOR(异或)、NOT(非)四种。它们只适用于对常量进行逻辑运算。注意,表达式中的逻辑运算符只能出现在语言的操作数部分并且是在汇编时完成运算的。 3.关系运算符
关系运算符包括EQ(相等)、NE(不等)、LT(小于)、(GT)大于、LE(小于或等于)、GE(大于或等于)6种运算。关系运算符是用于比较两类的大小,要求两个操作数都是数字或者是同一段中的两个地址值。比较的结果用逻辑值表示。关系运算符与逻辑运算符常结合在一起使用。 4.数值回送运算符
数值回送运算符分为两类:一类是将指定的变量名或标号地址的有关内容赋给指令,如OFFSET和SEG;另一类有3种:TYPE,LENGTH和SIZE,将变量名或标号的一些特征传送给指令。
(1)OFFSET
格式: OFFSET 变量或标号
汇编程序将回送变量或标号所在地址的偏移量给该指令。 (2)SEG
格式: SEG 变量或标号
汇编程序将回送变量或标号所在地址的段地址给该指令。
(3)TYPE格式: TYPE 变量或标号
用来确定标号或变量的类型,并根据类型作为一个操作数回送给指令。汇编中规定,如果是变量,则根据DB、DW、DD、DQ和DT分别用数值1、2、4、8和10回送给指令。如果是标号,根据标号的类型用-1和-2分别代表NEAR和FAR。 (4)LENGTH
格式: LENGTH 变量名
用来回送变量名下定义的数据项数目。值得注意的是它只对用DUP定义的数据起作用,凡没使用DW的回送值均为1。 (5)SIZE
格式: SIZE 变量名
用来回送为该变量名分配的字节数。可见SIZE应是TYPE和LENGTH值的乘积。 5.指定属性操作符
指定属性操作符有PTR和THIS等6种。它们的功能是建立一些新的存储器地址操作数,即新的变量、标号或地址表达式。 (1)PTR
格式:类型 PTR 表达式
说明:类型可以是BYTE、WORD、DWORD、NEAR、FAR等,表达式可以是某个变量、标号或地址表达式。
功能:建立一个新的存储器地址操作数,但不分配内存。新操作数与PTR右边的存储器地址
Page 33 of 66
资料下载
作数有相同的段地址和偏移量,类型为PTR左边规定的类型。因些,实际上,PTR操作符可给变量、标号或地址表达式定义新的名字和类型。 (2)THIS
格式:THIS 类型
功能:定义当前单元类型的操作符。 (3)SHORT
格式:JMP SHORT DES
功能:确定转移地址的属性,用在JMP指令中,规定转移范围在-128~+127个字节内。 (4)HIGH和LOW
两个字节选取操作符。在指令中用在字操作数之前,指定取该字的高字节或低字节参与运算。 (5)段属性
利用“段寄存器:地址表达式”的形式改变操作数的地址表达式所属段的特性。 九、80X86宏汇编语言的伪指令语(一)基本宏汇编语言的伪指令语句 8086/8088宏汇编有近60条伪指令,其大体分类如下表所示。
表8086/8088伪指令分类 类别 伪指令 类别 伪指令
符号定义伪操作 EQU,=,LABEL
宏处理伪操作 MACRO,ENDM,EXITM LOCAL,REPT,IRPC,IRP,PURGE
变量定义伪操作 DB,DW,DD,DQ,RECORD,STRUC 条件伪操作 IF,ENDIF,IF1,IF2,IFNB,IFE,IFDIF,IFNDFE IFIDN,ELSE 段定义伪操作 SEGMENT, ENDS GROUP, ASSUME,ORG
过程定义伪操作 PROC,ENDP 列表伪操作 PAGE,TITLE, SUBTTL,LIST, XLIST,%OUT
模块定义与通信 EXTRN,PUBLIC
NAME,END 其他 COMMENT,RADIX INCLUDE EVEN
1.符号定义
符号定义伪指令可用于为表达式赋予一个符号名,表达式可以是常量、变量、标号、指令语句和字符等。在程序中,任何需要这种表达式的地方都可以用被赋予的符号名来代替它。常用的符号定义语句有等值语句(EQU)和等号语句(“=”)。 (1)等值语句
格式:符号名 EQU 表达式
功能:用符号名代替右边的表达式的值。
说明:表达式可以是一个值、新符号名、可执行的命令或表达式的值。
注意:在同一个源程序中,EQU语句定义的符号不能再赋予不同的值,即不能再重新定义。 (2)等号语句
格式:符号名=表达式
功能:等号语句的功能和EQU语句类似,不同之处是它允许对符号名再定义。 2.变量定义
变量定义语句使用伪指令DB、DW、DD、DF、DQ和DT。格式:变量名
Page 34 of 66
资料下载
{DB|DW|DD|DF|DQ|DT}表达式
功能:在内存中分配一块以变量名为名字的一个或多个字节/字/双字/长字/4字/10字的数据储区,并填入由伪指令给出的数据。说明:
①变量名是可选择的,它表示定义的一块内存单元数据区的名字。
②花括号{}中的项是可选择的伪指令,每次定义只能选择其中一种。各伪指令的意义为: ●DB 定义字节数据存储区 ●DW 定义字数据存储区 ●DD 定义双节数据存储区 ●DF 定义长字数据存储区 ●DQ 定义4字数据存储区
●DT 定义10字压缩BCD码数据存储区 ③表达式是伪指令的操作
数,它可以是数值表达式、地址表达式、ASCII码表达式、?表达式或n DUP表达式。说明如下:
●数值表达式
数据在存储区中存放时,左边的数据项占较小地址,右边的数据项占较大的地址;对于非DB定义的数据,高位字节占据较大地址,低位字节占据较小地址。 ●地址表达式
地址表达式的运算结果是一个地址,因而只能使用伪指令DW和DD。这时,存储单元中存放的是存储器的地址值。如果使用DW,则存放的是段内地址偏移量;如果使用DD,则存放段地址和地址偏移量。
●ASCII码字符串表达式
使用伪指令DB可以定义用单引号括起来的字符串,它为字符串的每个字符分配一个存储单元,并依字符串从左到右的顺序,将字符的ASCII码按地址递增顺序放在内存中 ●?表达式
表达式?号时,表示符号名无确定值。汇编程序遇到?号时,它仍然为数据项分配存储单元,但不对它初始化。
●n DUP(?)
格式:数值表达式 DUP 项或项表
数值表达式的值表示重复的次数,其各项必须预先定义。项或项表表示重复内容,可以是?、数值、数值表达式、字符或重复子句。项表中的各项用逗号隔开。
当重复子句为DB、DW、DD、DQ和惟一操作数且项为?时,将不初始化数据区,该数据氏的原存信息保持不变。当重复句是惟一操作数时,定义的变量具有LENGTH和SIZE属性。
3.标号定义伪指令
格式:符号名 LABEL 类型
功能:将紧跟在本伪指令语句后的标号、操作码、过程或变量建立新的符号名,并刷新其类型属性。对标号、操作码或过程,其类型为NEAR、FAR;对变量,其类型为BYTE、WORD、DWOBD、FWORD、QWORD或TBYTE。
说明:LABEL伪指令提供了另一种定义标号或变量名的方法,但它并不为符号名分配存储空间 。
4.段定义语句
8086/8088的存储器是分段的,因此使用段定义语句来组织程序和利用存储器。常用的段定义伪
Page 35 of 66
资料下载
指令有:SEGMENT、ENDS、ASSUME、ORG、PAGE、PUBLIC、TITLE、SUBTTL等。 (1)SEGMENT和ENDS
SEGMENT和ENDS语句将汇编语言源程序分成段。 格式:
段名 SEGMENT[定位类型][组合类型][?类别?] ┆
语句段 ┇
段名 ENDS
说明:段名是由自己指定的为该段起的名字。定位类型、组合类型是给段名的属性,用来指出汇编程序为该段分配的存储器的起始地址;类别名则指出段的类别。用方括号括起来的项可以缺省。
①定位类型
用于指定该段地址中的5种可供选择段起点的边界类型,如下表所示。
定位类型
定位类型 含 义
BYTE(字节) 段的起始地址可以任意 WORD(字)
段的起始地址必须为偶数,即该地址的最低二进制位应为0
DWORD(双字) 段的起始地址必须为4的倍数,即该地址的最后2位二进制位应为0,通常总是把DWORD用于80386的32位段中
PARA(节) 段的起始地址必须为16的倍数,即该地址的最后4位二进制位应为0 PAGE(页) 段的起始地址必须为256的倍数,即该地址的最后8位二进制位应为0
这个类型可以为标号或变量赋予绝对地址,以便程序以标号或变量的形式存取这些存储器单元的内容。通常情况下,在AT类型的段中不定义指令或数据,只是说明一个地址结构。②组合类型
用来告诉连接程序LINK,本段与其他模块中同名段的组合连接关系。共有下表所示的5种可供选择的组合类型。如果此属性缺省,则表示该段是独立的,不与其他同名段发生联系,并有自己的段起始地址。
组合类型
组合类型 含 义
PUBLIC 链接程序LINK将不同模块中具有该类型且段名相同的段连接到同一个物理存储段中,使它们公用一个段地址
STACK 与PUBLIC的处理方式一样,只是连接后的段为堆栈段,链接程序LINK在链接过程中自动将新段的段地址送到堆栈段寄存器SS,将新段的长度送到堆栈指针寄存器SP。如果在定义堆栈时没有将其说明为STACK类型,在这种情况下就需要在程序中用指令给堆栈段寄存器SS、堆栈指针寄存器SP置值,这时链接程序LINK会给出一个警告信息 COMMON 产生一个覆盖段。链接程序LINK为该类型的同名段指定相同的段地址。段的长度取决于最长的COMMON段的长度。段的内容为所连接的最后一个模块中COMMON段的内容及其没有被覆盖到的前面COMMON段的部分内容 MEMORY 链接程序LINK不单独区分MEMORY类型,它把MEMORY与PUBLIC类型同
Page 36 of 66
共分享92篇相关文档