伪指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. TITLE伪指令用于给程序一个标题,列表文件中每一
页的第一行都会显示这个标题,它是用户任意选定
的字符串,但是字符的个数不能超过60.TITLE指令
也可以缺省,如果NAME和TITLE都缺省,则以源文件
名作为模块名.
3.END伪指令中的标号指出程序开始执行的第一条指
令的地址,END不能缺省。
6.偏移地址设置伪指令
注意事项:段寄存器名必须是CS、DS、ES、SS中的
一个,而段来自百度文库则必须是由SEGMENT定义的
段名,并且用SEGMENT定义了几个段,
ASSUME伪指令就需要指明几个段。
4.过程定义伪指令
过程定义伪指令用来定义一个子程序,子程序又称过程,在主程序中由CALL指令调用,调用结束将返回到主程序中CALL指令的下一条指令继续执行,而子程序中必须有一条返回指令RET。
指令格式:ORGn
指令功能:为指令或数据设置由n开始的偏移地址。
注意事项:n的取值范围是0~65535。
7.地址计数器伪指令
指令格式:$
指令功能:在汇编程序内,为了指示下一个数据或
指令在相应段中的偏移量,汇编程序使
用了一个当前位置计数器$。
【例6.51】执行下面程序段后,(CX)=12H
STR1DW‘AB’
6.4.1伪指令
1.数据定义伪指令
数据定义伪指令包括DB、DW、DD、DQ、DT,用于定义变量及分配存储区。
指令格式: [变量名]数据定义伪指令,操作数项
指令功能:用于定义变量的类型、给存储器赋初值或给变量分配存储单元。
注意事项:
1.方括号中的变量名为任选项,变量名后不跟冒号。
2.DB定义字节类型变量,DW定义字类型变量,DD定义双字类型变量,DQ定义四字类型变量,DT定义十字类型变量。
STR2DB16 DUP(?)
CNTEQU $-STR1
MOVCX,CNT
3EQU伪指令的功能类似于等号“=”的功能,区别在于由EQU赋值的名字不可重复赋值,而由“=”赋值的名字可以重复赋值。如:STR=1
STR=STR+1
3.段定义伪指令
(1)完整段定义伪指令
指令格式:段名SEGMENT
……
段名ENDS
指令功能:SEGMENT和ENDS成对使用,用来定义一
个段的开始和结束。
指令格式:过程名PROC类型
……
过程名ENDP
指令功能:PROC和ENDP成对使用,用来定义一个过
程的开始和结束。
注意事项:
1PROC和ENDP前面的过程名必须一致。
2PROC和ENDP之间的语句是定义过程的内容。
过程的类型有NEAR和FAR两种,在本段内调用的过程是NEAR过程,可在不同段间调用的过程是FAR过程,定义时若不指定类型,缺省为NEAR类型。
2.赋值伪指令
指令格式:名字EQU表达式
指令功能:将表达式的值赋予一个名字,以后可以
用这个名字来代替对应的表达式。
注意事项:
1表达式可以是一个常数、符号、数值表达式或地址表达式。
2已赋值的名字可以在以后的赋值语句中引用。如下面两条语句执行后TAB2的值为6。
TAB1EQU 9
TAB2EQU TAB1-3
BUF2 DB 1000;操作数项超过了字节数的取值范围
BUF3 DD‘HELLO’;超过2个字符的字符串只能用DB
BUF4 DB BLOCK;地址表达式只能用DW或DD定义
如将DB改为DW,则操作数项表示取BLOCK的偏移地
址;如将DB改为DD,则操作数项表示取BLOCK的偏移
地址和段地址,且第一个字为偏移地址,第二个字为段地址。
3.操作数值不能超出相应数据类型限定的取值范围。
4.操作数项可以包括多个数据,它们之间用逗号隔开。操作数项可以是常数表达式、地址表达式(仅适用DW、DD)、字符串(超过2个字符仅用DB)、问号(只分配存储单元,而不赋值)、重复子句DUP。
下面是不正确的定义:
BUF1:DB 90H,80H;变量不能有冒号
5.模块定义伪指令
在汇编语言中每一个独立的源程序称为一个模块,在源程序的开始可以用NAME或TITLE伪指令为模块命名,而源程序结束使用END伪指令。
指令格式:NAME模块名
TITLE模块名
END[标号]
指令功能:
1. NAME伪指令可以缺省,如果缺省NAME指令,汇编程序
以TITLE指令中前6个字符作为模块名.
注意事项:
1SEGMENT和ENDS前面的段名必须一致。
2SEGMEN和ENDS之间的语句是定义段的内容.
3可以定义代码段、数据段、附加数据段和堆栈段。
(2)指定段寄存器伪指令
指令格式:ASSUME段寄存器名:段名[,段寄存器
名:段名]
指令功能:由于段名是用户定义的,所以要指
明哪个段名对应哪个段寄存器。
相关文档
最新文档