文章目录
1. 伪指令
1.1 段定义伪指令
格式:段名字 SEGMENT [类型]
……
段名字 ENDS
例4.1 data SEGMENT
……
data ENDS
1.2 段寄存器说明伪指令
格式:ASSUME 段寄存器:段名 [,段寄存器:段名]
说明:利用SEGMENT/ENDS定义完一个段之后,必须通过ASSUME伪指令来明确所定义的段与段寄存器之间的关系。
例4.2 ASSUME CS:code,DS:data
该语句告诉汇编程序,从现在开始CS寄存器对应名字为code的段,DS寄存器对应名字为data的段。
1.3 过程定义伪指令
格式:过程名 PROC FAR/NEAR
……
过程名 ENDP
例4.4
main PROC FAR
……
main ENDP
1.4 源程序结束伪指令
格式:END [<标号>]
说明:对于END后面所带的标号,必须事先在程序中加以定义,表示程序要从标号所对应的指令开始执行,也就是说标号给定了程序的启始地址。
2. 变量/标号定义伪指令
2.1 变量定义
格式:[<变量名>] 变量定义伪指令 <表达式>
功能:声明一个变量的数据类型、代表的值、地址。
说明:
(1) 变量名是可有可无的,如果有,则会被汇编成该变量所对应的最开始字节的偏移地址。
(2) 变量定义伪指令(共5个)
① DB:定义字节类型变量,指示每个操作数占1个字节。
② DW:定义字类型变量,指示每个操作数占1个字(16位)。
③ DD:定义双字类型变量。
④ DQ:定义四字类型变量。
⑤ DT:定义十字节类型变量。
(3) 表达式可以是常数、字符串、变量、“?”、DUP子句等,各表达式间用逗号进行分隔。
① 表达式是常数的情况:
例4.5 X DW 1234H,4567H
② 表达式是字符串的情况:
例4.6 STR DB ‘HELLO’
X DB ‘AB’
Y DW ‘AB’
③ 表达式是变量的情况:
例4.7 X DB 10H
Y1 DW X
Y2 DD X
说明:用DW或DD可以把变量的地址存入存储器。使用DW时,将存储变量的偏移地址;使用DD时,将存储变量的偏移地址和段地址,并且先存放偏移地址,后存放段地址。
④“?”:表示不定义初值,只预留存储器空间。
例4.8 X DB 1CH,30H
Y DB ‘ASM’
Z DW 10H,?,20H
⑤ DUP:复制操作符,用来复制某个(或某些)操作数,DUP可以嵌套使用。
格式:
<重复次数> DUP(<操作数1>,<操作数2>,…)
(4) 变量的三个属性
① 变量的段属性:是指变量被定义时所在段的段地址;
② 变量的偏移属性:是指从段的起始地址到定义变量的位置之间的字节数,也称为变量的偏移地址;
③ 变量的类型属性,定义该变量时所保留的字节数目。
2. 2 标号定义
标号在代码段中定义,后跟冒号,是指令在存储器中存放地址的符号表示。
标号也具有三个属性:
段属性、偏移属性、类型属性。
标号的段属性和偏移属性与变量的这两个属性类似,标号的类型属性有两种:
NEAR:标号只能在段内引用;
FAR:标号可以在段间引用。
2.3 表达式
- 常量:在源程序中已有确定数值的量。
主要用于给变量赋初值等方面,其表