[标识符] 指令助记符 [操作数] [;注释]
算术、逻辑、关系运算符 eg:+、-、×、 / 、 AND、OR、LT
取值运算符
a) $ 运算符
$:当前地址偏移量的值
b) SEG 和OFFSET
SEG: 求标号或变量的段地址
OFFSET: 求标号或变量的偏移地址
c) TYPE 返回标号或存储器操作数的类型值
d) LENGTH和SIZE(对用DUP定义数据的情况下)
LENGTH:返回一个与存储器操作数相联系的基本数据个数
SIZE:返回一个为存储器操作数分配的字节数
关系:SIZE=LENGTH × TYPE
属性运算符
用来给指令中的操作数指定一个临时的属性,而暂时忽略操作数定义时的属性。
PTR 定义操作数为新的类型
一般格式:类型 PTR 操作数
功能:建立一个存储器操作数,它与其后的存储器操作数有相同的段地址和偏移地址,但有不同的类型。
1) 常数
二进制(B),八进制(Q),十六进制(H),十进制(D)(默认),字符和字符串
2)常量操作数
3)存储器操作数
存储器操作数有三个属性:
1)编写源程序;2)汇编;3)连接;4)调试。
DB:定义字节,其后的每个操作数占有一个存储单元,连续存放;
DW:定义字,其后的每个操作数占有两个字节;
DD: 定义双字,其后每个操作数占4个字节;
若仅保留单元,不初始化,用?代替初值; ARRAY DB 100 DUP(?)
若数据重复,用 n DUP( )代替,n为重复次数。DATA1 DB 100 DUP(‘AB’)
① EQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替。
一般格式:标识符 EQU 表达式
TIMES EQU 50
DATA DB TIMES DUP (?)
②PURGE伪指令用来释放由EQU伪指令定义的变量,这样这些变量就可以被重新定义。
PURGE TIME
TIME EQU 100
用EQU伪指令定义的变量值在程序运行过程中不能改变,若要改变这些变量的值必须
先由PURGE伪指令释放,再重新定义。
③“=”伪指令也可给变量赋值。使用“=”伪指令定义的变量值不用释放就可重新定义。
一般格式:标识符 = 表达式
BETA = TIMES-2
BETA = TIMES+5 ;重新赋值
段名 SEGMENT [定位类型][组合类型][类别]
段名 ENDS
一般格式:ASSUME 段寄存器:段名[,段寄存器:段名,…]
功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。
注意 :在装入程序中DS寄存器由于被用作其它用途,因此,在用户程序中必须用两条指令对DS进行初始化,以装入用户的数据段段地址。当使用附加段时,也要用MOV指令给ES赋段地址。 CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA ;DATA段值送AX MOV DS,AX ;AX内容送DS,DS才有实际段值 CODE ENDS
在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。
过程名 PROC [类型] ; 类型由FAR和NEAR来确定,如果缺省类型,则默认为近过程。
过程体
RET ; 过程体内至少有一条RET指令
过程名 ENDP
注意 : PROC和ENDP要成对出现。
call 调用过程
宏指令定义格式:
宏指令名 MACRO <形参列表>
汇编程序段(宏体)
ENDM
功能:指定在其后的指令或数据存放的偏移地址。
格式:ORG 表达式
CODE SEGMENT
ORG 0100H
MOV AX, 0
CODE ENDS ; 指定MOV指令放在代码段中偏移地址为0100H开始的位置。
DATA SEGMENT
ORG 2000H
NUM DB 0,5
DATA ENDS ; 指定NUM指向数据段中偏移地址为2000H开始的位置。
一般格式: END 表达式
顺序、分支、循环程序设计
入口参数:由主程序传给子程序的参数
出口参数:子程序运算完传给主程序的结果。
1)在显示器上显示单个字符(2号功能)
功能:在屏幕的光标处显示单个字符
入口参数:要显示字符的ASCII码放在DL中
出口参数:无
MOV DL, ‘A’ ; 显示字符A
MOV AH, 2 ; 提供调用功能号
INT 21H ; 系统功能调用
2)在屏幕上显示字符串(9号功能)
功能:在屏幕上当前光标处输出存储在内存数据段的一串字符串,该字符串以‘
’
结
束
。
入
口
参
数
:
D
S
:
D
X
指
向
欲
显
示
字
符
串
的
首
址
出
口
参
数
:
无
D
A
T
A
S
E
G
M
E
N
T
S
T
R
I
N
G
D
B
‘
I
a
m
a
s
t
u
d
e
n
t
.
’结束。 入口参数: DS:DX指向欲显示字符串的首址 出口参数:无 DATA SEGMENT STRING DB ‘I am a student.
’结束。入口参数:DS:DX指向欲显示字符串的首址出口参数:无DATASEGMENTSTRINGDB‘Iamastudent.’
DATA ENDS
MOV DX, OFFSET STRING ; 指向字符串首址
MOV AH, 9 ; 提供调用功能号
INT 21H ; 系统功能调用
3) 带显示的键盘输入(1号功能)
功能:等待键盘输入,直到按下一个键。
入口参数:无
出口参数:键入键的ASCII码放在AL中,并在屏幕上显示该键。
MOV AH, 1 ; 提供调用功能号
INT 21H ; 系统功能调用 ; 程序运行到此停下,等待用户键盘输入
MOV [2000H], AL ; 用户从键盘键入的键的ASCII码进入AL中
4)不带显示的键盘输入(7号功能)
功能:等待键盘输入,直到按下一个键。
入口参数:无
出口参数:键入键的ASCII码放在AL中,但在屏幕上没有显示,常用于输入密码。
MOV AH, 7 ; 提供调用功能号
INT 21H ; 系统功能调用
MOV [2000H], AL
该功能与1号功能类似,只是字符不在屏幕上显示。
5)字符串输入(10号功能)
功能:等待从键盘输入一串字符到存储区的数据段,直到按下回车结束输入。
入口参数:DS:DX指向接收字符串的内存地址的首址,该地址的第一个字节是由用户设置的可输入字符串的最大字符数(含回车)
出口参数:存放输入字符串存储区的第二个字节是实际输入的字符数(不含回车),实际输入的字符串从该存储区的第三个字节处开始存放。
6)程序结束返回DOS( 4C号功能 )
功能:将控制权移交DOS。
入口参数:无
出口参数:无
MOV AH, 4CH
INT 21H