汇编语言程序设计
② LOOPZ/LOOPE 当相等或为零时循环指令 格式:LOOPZ/LOOPE OPR 循环条件:ZF=1且(CX)≠0 ③ LOOPNZ/LOOPNE 当不相等或不为零时循环指令 格式:LOOPNZ/LOOPNE OPR 循环条件:ZF=0且(CX)≠0
以上三条指令执行的步骤: 1. (CX)=(CX)-1
2. 判断测试条件,满足条件则进行循环,否则退出循环。
例如:设在数据段中有如下数组:ARRAY DW 1,2,3,4,5 求该数组各元素的和,并将结果保存到AX寄存器中。
MOV CX,5 MOV AX,0 MOV SI,0
BEGIN: ADD AX,ARRAY[SI] ADD SI,2 LOOP BEGIN 4) 子程序调用和返回指令 ① CALL 子程序调用指令 格式:CALL DST 操作:
1. 根据情况将IP(和CS)入栈 2. 根据情况设置IP(和CS) 功能:在主程序中用于调用子程序 ② RET 返回指令 格式:RET
操作:根据调用情况将IP(和CS)出栈 功能:在子程序中用于返回主程序
5)中断指令 ① INT 中断指令 格式:INT TYPE
功能:调用TYPE号中断 ② INTO 若溢出则中断指令 格式:INTO
- 25 -
汇编语言程序设计
功能:调用4号中断 ③ IRET 从中断返回指令 格式:IRET
功能:用于中断处理程序中,其功能是从中断处理程序返回到主程序中。
6、处理器控制指令(略)
四、汇编语言中的标记、表达式和伪操作 1、汇编语言概况(略)
2、汇编语言中的标记 ① 标识符 要求: ·标识符不能以数字开头 ·标识符可以由数字、字母和下划线组合而成 ·一个标识符的最大长度不能超过31个字符 ② 保留字
凡是微处理器的指令、伪指令、寄存器名都是保留字 ③ 分界符
分界符作为一个程序中或一条指令中两个部分的分隔符号。 参见P145表3.2 ④ 常数 ·二进制数:二进制数后面跟一个字母B,如:10110111B ·十进制数:十进制数后面跟一个字母D,字母D也可以不加。如:123D或123 ·十六进制数:十六进制数后面跟一个字母H,如果该数以A~F开头,则必须在前面加0 ·八进制数:八进制数后面跟一个字母Q ⑤ 注释
在汇编语言中,注释以;作为开头,;后面的均被看作是注释。
3、表达式
由操作数和运算符组成,在汇编时一个表达式得到一个值。 ① 操作数 ② 运算符 ·算术运算符 +,-,*,/
- 26 -
汇编语言程序设计
·逻辑运算符
AND,OR,NOT,XOR
注:只能对常数运算,结果也为常数 ·关系运算符
EQ(等于),NE(不等于),LT(小于),GT(大于),LE(小于等于),GE(大于等于)
如: MOV BX,PORT LT 5
如果PORT小于5 则汇编后相当于:MOV BX,0FFFFH 如果PORT大于5 则汇编后相当于:MOV BX,0 ·分析运算符
OFFSET 取有效地址,如 MOV DX,OFFSET DA1 SEG 取段地址,如 MOV DX,SEG DA1 TYPE,SIZE,LENGTH(略)
4、伪指令(指示性语句) 伪指令和指令之间的区别: 指令:在运行期间执行的
伪指令:在汇编期间由汇编程序处理。 ① 段定义伪指令 格式:
segment_name SEGMENT : :
segment_name ENDS
说明:
1. 对于数据段,堆栈段,附加段,都是用于存放数据 2. 对于代码段用于存放程序 ② 指定段伪指令 格式:
ASSUME 段寄存器名:段名,段寄存器名:段名,……
如:ASSUME CS:code_segment, DS:data_segment ③ 表示源程序结束的伪指令 格式:
END [label]
- 27 -
汇编语言程序设计
其中:label为指示程序开始执行的起始地址 ④ 数据定义及存储器分配伪指令 格式:
[变量名] 助记符 操作数 其中:
1. 助记符:说明所定义的数据类型,可为如下类型: DB:定义字节数据 DW: 定义字数据 DD:定义双字数据 DQ:定义4字数据 DT:定义10字节数据
2. 操作数:可为常数,表达式,字符串,地址等 功能:分配存储空间,存放数据 例1: 程序 存储器分配情况
0AH 10H 64H 00H DAT DB 10,10H
00H DW 100,100H 01H DAT2 DD 3*20 3CH 00H 00H 00H 00H
例2:操作数为字符串,此时DB,DW意义不同。 MESS1 DB ‘AB’
MESS2 DW ‘AB’ ;注意:如果DW型字符串,长度超过2个,则程序在汇编时出错。
存储器分配情况为: 41H A 42H B 42H B 41H A 例3:操作数为地址
DAT1 DB 12H,10H
- 28 -
汇编语言程序设计
DAT2 DW DAT1 DAT3 DW DAT2
存储器分配情况为:
例4:操作数为?,表示保留存储空间,暂时不存入数据(初始为0) NUM DB 0,?,0 DAT DW ?,52H
00H — 00H — — 52H 00H 例5:操作数可以用复制操作符
如:DAT1 DB 2 DUP(1,?)
01H — 01H — 注:DUP 也可以嵌套
如:DAT1 DB 2 DUP(0,2 DUP(1,?),1))
请同学们思考,上述语句如何分配存储空间。 ⑤ 表达式赋值伪指令 1、EQU
格式:表达式名 EQU 表达式 2、=
格式:表达式名 = 表达式
作用:给某一表达式赋予一个名字。 如:
constant EQU 256 或 constant = 256
- 29 -
汇编语言程序设计
区别:EQU不可以重复定义,而=可以重复定义。 如: EMP EQU 7 EMP = 7 : : : : EMP EMP = 12 EQU 12 √ ×
附:调用DOS功能调用实现输入输出的方法(INT 21H) 调用参数 返回参数 AH 功能 键盘输入并回AL=输入字符 01 显 DL=输出字符 02 显示输出 DS:DX=串地址 字符串必须以’$’ 09 显示字符串 结束
- 30 -