汇编语言(2)伪指令
一.数字定义伪指令
用于定义数据区中变量的类型及其所占内存空间大小。
伪指令助记符 | 解释 |
---|---|
DB | 定义的变量为字节型 |
DW | 定义的变量为字类型 |
DD | 定义的变量为双字型 |
DQ | 定义的变量为4字型 |
DT | 定义的变量为10字节型 |
注:定义字符串必须用DB伪指令
重复操作符DUP
作用:多用于为一个数据区的数据设定相同的初值
?
表示随机值,用来预留存储空间
DW 20 DUP(?) ; 预留40个字节单元,每单元为随机值
二.符号定义伪指令
**格式:**符号名 EQU 表达式
功能类似于定义变量,EQU说明的表达式不占用内存空间
三.段定义伪指令
在源程序中定义逻辑段,说明逻辑段的起始和结束,说明不同程序模块中同类逻辑段之间的联系形态。
格式:
段名 SEGMENT [定位类型][组合类型]
.
.
.
段名 ENDS
DATA SEGMENT
MEM1 DB 11H,22H
MEM2 DB 'HELLO!'
MEM3 DW 2 DUP(?)
DATA ENDS
四.设定段寄存器伪指令
**格式:**ASSUME 段寄存器:段名[,段寄存器:段名,…]
- 代码段一定要声明,一般中还会定义数据段,对于串操作指令,要定义附加段
五.结束伪指令
格式: END[标号]
六.过程定义伪指令
用于定义一个过程题
过程名 PROC [NEAR/FAR] ;近过程体可以缺省NEAR,而远过程体不可缺省FAR
.
.
.
RET; 过程体的最后一条指令必须是RET
过程名 ENDP
七.宏命令伪指令
具有独立功能的程序段,当源程序中需要多次使用同一个程序段时,可以将该程序段定义为一个宏
宏命令名 MACRO <形式参数>
.
.
.
ENDM
例子:
DADD MACRO X,Y,Z
MOV AX,X
ADD AX,Y
MOV Z,AX
ENDM
;宏的调用
DADD DATA1,DATA2,SUM
八.调整偏移量伪指令
默认情况下,程序或变量在逻辑段中的起始偏移地址为:0,可以使用ORG指令来规定起始地址。
ORG 表达式;计算值伪非负常数
六.汇编语言源程序结构
数据段名 SEGMENT
...
数据段名 ENDS
附加段名 SEGMENT
...
附加段名 ENDS
堆栈段名 SEGMENT
...
堆栈段名 ENDS
代码段名 SEGMENT
...
代码段名 ENDS
END
系统功能调用DOS
注:DOS和BIOS中断均可能影响AX
DOS软中断
DOS中断包括:设备管理,目录管理,文件管理,其他用中断类型码区分
类型码为:21H
DOS功能调用的基本步骤
- 将调用参数装入指定的寄存器;
- 将功能号装入AH;
- 按中断类型号调用DOS中断﹔
- 检查返回参数是否正确。
MOV AH,功能号
<置相应参数>
INT 21H
1.单字节输入
1号功能,输入的字符在AL中,即AL为出口参数存放位置。
MOV AH,01
INT 21H
2.字符串输入
10号功能,接受键盘键入的字符串,缓存区须定义在数据段,字符串在内存的存放位置: DS:DX
DAT1 DB,20,?,20,DUP(?)
.
.
.
LEA DX,DAT1
MOV AH,0AH
INT 21H
3.单字符显示输出
2号功能,把待输出的字符传送给了DL
MOV AH,2
MOV DL,41H
INT 21H
4.字符串输出显示
9号功能,被现实的字符串必须以‘$'结束,且为了格式的需要,可以加上会查和换行符(0DH,0AH)
DATA SEGMENT
MESS1 DB 'InputString:',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
.
.
.
MOV AH,09
MOV DX,OFFSET MESS1
INT 21H
5.返回操作系统(DOS)功能
4CH功能号,常用于程序结尾处,执行完后能正常返回OS
MOV AH,4CH
INT 21H