当前位置:首页 > 计算机三级PC技术分章节考试要点
资料下载
等对特。MASM程序允许使用它,主要是为了与其他支持Intel MEMOˉRY类型的连接程序兼容
AT表达式 链接程序LINK将具有AT类型的段装在表达式值所指定的段地址边界上
③类别
用于控制段的存放次序。它可以是任何合法的名称,但必须用单引号括起来。连接程序LINK只使同类别的段发生关系,并将它们存放在连续的存储空间中。若“类别”选择项缺省,则表明该段类别为空。 (2)ASSUME语句
格式:ASSUME 段寄存器:段名[,段寄存器:段名,]
功能:告诉汇编程序,程序的段结构和在各种指令执行时访问哪一段。段寄存器只能是CS、SS、DS、ES中的一个,段名是由伪指令SEGMENT/ENDS语句中定义的段名。注意: ●代码段寄存器CS只能用于有程序的段。代码段寄存器CS所对应的段名必须在该语句之前有定义,因此,ASSUME语句一般都设置于代码段内,放在段定义语句之后。 ●堆栈段寄存器SS只能与堆栈段相对应。
●ASSUME语句是说明性语句,除主程序的代码段及最后一个椎栈段外,其余段寄存器的初值均由用户在程序中设置。 (3)组定义伪指令 GROUP
格式:组名GROUP 段名[,段名,……]
功能:将GROUP定义符后指定的所有段分配在一个64KB的物理存储器段中,并赋予该段一个名字———组名。说明:
●组名是用户自己定义的名字,是指出组的起始地址的一种符号。这个符号必须是惟一的,不能与任何标号、段名及变量名等同名。
●段名是用SEGMENT语句定义的或者由SEG运算符得到的段名。
●组定义语句不影响各段的次序,因此组内各段不一定要连续存放,但它们都必须包含在64KB物理存储器段中。
●当源程序结构需要多个逻辑段时,使用该语句可节省段寄存器。
●实际应用中最好是让代码段为一组,堆栈段为一组,数据段为一组或两组,但组中各段所占用的内存储器的总量不超过64KB。
(4)指定地址伪指令 ORG格式:ORG 表达式
ORG $+偏移地址
功能:指定该语句之后程序段或数据块的起始地址的偏移量,即语句表达式的值作为起始地址,连续存放程序和数据,直到下一个ORG语句为止。 5.过程定义伪指令
在程序设计中,常把具有一定功能的程序段设计成为一个过程。过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行完后,控制返回调用它的地方。过程定义语句的格式:
过程名 PROC [NEAR或FAR] ┇ (语句) ┇ RET
过程名 ENDP说明:
●过程名是给过程起的名字,调用过程时,过程名起标号的作用。
●伪指令PROC和ENDP必须成对出现,限定一个过程,并说明该过程是NEAR过程还是
Page 37 of 66
资料下载
FAR过程。
●在宏汇编中,过程调用和从过程返回使用CALL和RET。
●有两种调用方式:段内调用和交*调用。如果以用段内CALL指令调用过程则必须用段内RET指令返回,这样的过程是NEAR过程,用段交*CALL指令调用过程,则必须做段交*RET指令返回,这样的过程是FAR过程。
●在一个过程中可以有多于一个的RET指令,并且过程中最后一条指令可以不是RET,但必须是一条转移过程中某处的转移指令。 ●主程序和子程序都可以作为一个过程。 6.结束语句 格式:END 表达式 功能:结束整个源程序。
说明:表达式必须产生一个存储器地址。这个地址是当程序执行时,程序第一条要执行指令的地址。
7.列表伪指令语句
为使源程序的.LST文件满足用户的某些要求,宏汇编专门设置了一组列表伪指令。 (1)格式控制伪指令
格式控制伪指令有PAGE,TITLE和SUBTTL。①PAGE 一般为程序的第一语句,它指定汇编程序所产生的列表文件每页的行数和每行的字符数。格式:PAGE 参数1,参数2
说明:参数1表示每页行数,参数2表示每行字符数。②TITLE
用来为程序指定一标题,以后的列表文件会在每页第一行打印这个标题。格式:TITLE 正文③SUBTTL
用于为程序指定一个小标题,打印在每一页的标题之后。格式:SUBTTL 正文 (2)列表控制伪指令
列表控制伪指令很多,主要有:
①.LALL,.SALL和.XALL这是针对宏指令的伪指令。格式:.LALL/.SALL/.XALL说明: ●.LALL 伪指令用于对所有宏汇编列出完整的文本。 ●.SALL 伪指令用于删除宏指令所产生的所有列表。 ●.XALL 只将宏扩展中产生目的代码的源程序列表。 ②.LIST和.XLIST格式:.LIST/.XLIST说明:
●.LIST 是默认伪指令,对所有源程序进行列表直到遇到.XLIST伪指令止。
●.XLST 对所有源程序不产生列表直到遇到.LIST伪指令为止。上述伪指令只用于汇编产生.LST文件时起作用。
8.模块定义伪指令和通信伪指令
在程序设计中,可以将一个复杂的程序分成若干个程序模块,每个模块在物理上和逻辑上都是相对独立的,可对它们分别进行编写和调试。即对所有模块汇编完后,再由链接装配程序LINK连接成一个完整的可执行程序。模块定义和通信指令则是实现模块划分、命名及不同模块中数据共享等的说明和记号。 (1)模块定义语句
模块定义使用NAME和ENDD两条伪指令。语句格式: NAME 模块名 (语句)ENDD 表达式说明:
●模块名是任选的为本次汇编产生的目的模块所起的名字,是NAME的操作数。
●ENDD表示源程序到此结束。同时,在主模块中ENDD后允许有表达式,其他它模块只书写END。
Page 38 of 66
资料下载
(2)PUBLIC伪指令
该伪指令定义可供其他模块引用的符号。格式:PUBLIC 符号表
说明:符号表的各项用逗号隔开,符号可以是符号常量、变量、标号或过程名。 (3)EXTRN伪指令
EXTRN伪指令的功能是用于声明当前模块使用的哪些标识符在其他模块内定义。 格式:EXTRN 符号:类型[,符号:类型,……]
说明:符号可以是符号常量、变量、标号或过程名;类型可以是BYTE、WORD、DWORD、NEAR、FAR和ABS。各项由逗号隔开。 (二)高级汇编伪指令语句1.结构和记录 (1)结构
①结构类型数据定义伪指令
80x86宏汇编使用伪指令STRUC和ENDS建立一种结构类型的数据,然后通过结构类型数据的预置,便可方便地访问结构中的各数据项,而不需要对操作数地址表达式进行繁锁的计算。 结构类型数据定义的格式: 结构名 STRUC ┆
字段名 数据定义伪指令定义符 表达式
┆
结构名 ENDS
说明:结构类型数据是用STRUC和ENDS括起来的数据定义语句序列,这时数据定义语句中的符号称为字段名。注意:
●定义结构时,STRUC和ENDS必须成对出现,缺一不可。
●结构名是为结构起的名字,是任意选定的。 ●同时在同一结构定义中,字段名不得重名。 ②结构变量说明与赋初值
结构类型数据的定义只是告诉汇编程序已存在这样一种形式的变量,还必须对结构进行存储分配和预置后才能真正产生结构数据的变量。结构类型数据预置的格式: 结构变量名 结构名 <字段值表>说明:
●DATAMAX和DATATXN是结构变量名。 ●结构变量名是任意的,由程序员自行设定。
●结构变量名与具体的存储空间和数据相联系,在程序中可直接引用。
●字段值表用来给结构变量赋初值,字段值必须用尖括号括起来,其排列顺序和类型应该与结构定义时的各字段相一致,各字段值之间用逗号隔开。如果采用定义结构时的初值,则仅写一个逗号;若所有字段采用定义时的初值,则仅写一对尖括号。
注意:并不是所有的字段都可以重新赋初值,只有一项数据的字段可重新赋值。在程序中引用结构变量,可直接写结构变量名:引用结构变量的某一字段时,要采用下述格式:结构变量名.字段名 (2)记录
记录是一种处理按位计算信息的数据类型。记录定义的格式: 记录名 RECORD 字段名:宽度[=表达式][,……]说明:
●记录名和字段名必须具有惟一性;
●宽度表示字段所占的位数(1~16位),如果各字段的宽度和大于8位,那么汇编程序按字处理,否则按字节处理。若总值数少于8位或16位,则所有字段都右对齐到字或字节的最低有效位置。表达式赋给相应字段的初值,是可选择的。
●记录的各字段宽度之和不得大于16位。记录也必须经过预置才能产生记录类型数据变量,
Page 39 of 66
资料下载
才能真正占有内存。记录预置的格式:
记录变量名 记录名 <字段值表>
说明:字段值表是赋给各字段的初值,必须用尖括号括起来,表中各项间用逗号分隔,各项顺序应与记录定义时相一致。若某字段采用时的初值,则该字段用逗号表示;若各字段均采用定义时的初值,则仅用尖括号。
对记录进行操作的专用操作符有3个,即:记录字段名,WIDTH和MASK。①记录字段名 这个操作符无操作数,可直接引用,它的结果是一个立即数,表示该字段的最低位移到所在记录最右边(0位)所需的移位次数。②WIDTH 返回记录或记录某字段的宽度。
格式:WIDTH 记录名或记录字段名③MASK 格式:MASK 记录字段名
MASK的结果是一个8位或16位二进制数,这个二进制数中相应于该字段的各位均是1,其余各位均是0。
记录操作符可以与运算符NOT、OR、AND、SHL、SHR配合使用。
关于记录、记录字段及记录变量的调用,由于记录有自己专用的操作符,故利用这些操作符可对记录及其字段进行操作。
2.宏指令
在汇编语言程序中,有的程序段有时要多次使用,为了使在源程序中不重复书写这个程序段,可以用一条宏指令来代替,在汇编时由汇编程序产生所需的代码。宏指令的使用过程是宏定义、宏调用和宏扩展。 (1)宏定义
宏指令的定义格式:
宏指令名 MACRO[形式参数]┆(宏体) ENDM说明:
●宏指令名是给宏指令起的名字,MACRO是宏定义的定义符,ENDM是宏定义的结束符,两者必须成对出现。
●MACRO和ENDM之间的指令序列称为宏体,即用宏指令要代替的程序段。宏指令具有接受参数的能力,宏体中使用的形式参数必须在MACRO语句中出现。当有两个以上参数时,需用逗号隔开。
●在宏指令被调用时,这些参数被给出的一些名字或数值所取代。
(2)宏调用经过宏定义后,在源程序中的任何位置可以直接使用宏指令名,实现宏指令的调用,称为宏调用。宏调用的结果是将汇编程序翻译成该宏定义的程序段,而产生的目标代码拷贝到调用点。宏调用的格式: 宏调令名(参数,……) (3)宏扩展
在汇编宏指令时,宏汇编程序将宏体的指令插入到宏指令所在的位置上,并用实在参数代替形式参数,同时在插入的每一条指令前加一个“+”号,这个过程称为宏扩展。 (4)常用宏指令
80x86宏汇编中常用宏指令的格式及功能如下表所示。
常用宏指令
名称 格式 功能
MACRO 宏定义伪指令
PURGE PURGE宏指令名[…]
其功能是取消宏指令名的定义。一个PURGE指令可同时取消多个宏定义
Page 40 of 66
共分享92篇相关文档