第四章 8086汇编语言程序设计
几个概念
8086汇编语言的语句
8086汇编中的伪指令
8086汇编中的运算符
汇编语言程序设计
宏定义与宏调用
系统调用几个概念
汇编语言
汇编语言源程序
汇编
汇编程序
4,1 8086汇编语言的语句汇编语言由指令性语句和指令性语句组成
一,指令性语句格式
[标号,] 操作码 [操作数 1,] [操作数 2] ; [注释 ]
二,指示性语句格式
[标识符 ( 名字 ) ] 指示符 ( 伪指令 ) 表达式
三,有关属性存储器操作数的属性有三种:段值,段内偏移量和类型 。
4,2 8086汇编中的伪指令
一,符号定义语句
1、等值语句格式:符号名 EQU 表达式例,⑴ PORT EQU 1234
⑵ BUFF EQU PORT+ 58
⑶ MEM EQU DS:[BP+ 20H]
⑷ COUNT EQU CX
⑸ ABC EQU AAA
2、等号语句格式,NUM= 34
……
NUM= 34+ 1
二、变量定义语句格式,符号名 DB/DW/DD 表达式
1、定义一组数据例 1,BUFF DW 1234H,0ABCDH,8EH
DW –79DH,7B6AH
2、定义一串字符例 2,STR DB ‘ Welcome !’
3、定义保留存储单元例 3,SUM DW?,?
4、复制操作复制操作符 DUP( Duplication) 可预置重复的数值例 4,ALL_ZERO DB 0,0,0,0,0
用复制操作可改为:
ALL_ZERO DB 5 DUP( 0)
5,将已定义的地址存入内存单元例 5,LIT DD CYC
…
CYC,MOV AX,BX
三、段定义语句
1,段定义语句格式:
段名 SEGMENT [定位类型 ] [组合类型 ] [‘类别’ ]
……
段名 ENDS
只需要掌握段名 SEGMENT
……
段名 ENDS
2、段假设语句
ASSUME 段寄存器名:段名 [,…]
3,ORG伪指令、地址计数器 $
ORG伪指令格式,ORG <表达式 >
4,END 表示源代码结束格式为,END 常数或表达式,
四、过程定义语句过程名 PROC NEAR/FAR
……
RET
过程名 ENDP
4,3 8086汇编中的运算符一,常用运算符
1,算术运算符
+ ( 加 ),- ( 减 ),*( 乘 ),/
( 除 ),MOD( 求余 ) 。
2,逻辑运算符
AND,OR,XOR,NOT
3,关系运算符
EQ( 相等 ),NE( 不等,)
LT( 小于 ),GT( 大于 ),
LE( 小于等于 ),GE( 大于等于 ) 。
关系成立,全 1
关系不成立,全 0
例,MOV DL,10H LT 16
例,AND AX,555 GT 222
二,常用的操作符
4,分析操作符
1) SEG操作符例,MOV AX,SEG BUFF
2) OFFSET操作符例,MOV BX,OFFSET BUFF
3) TYPE操作符对于变量有 3种,1 字节型;
2 字型;
4 双字型 ;
对于标号有 2种:- 1 NEAR( 段内 ),
- 2 FAR( 段间 ) 。
例,BUFF DB 20H
MOV BX,TYPE BUFF?
MOV BX,01
4) LENGTH操作符
5) SIZE操作符
SIZE= TYPE× LENGTH
例,BUFF DB 10DIP(?)
MOV CX,LENGTH BUF
MOV CX,10
MOV CX,SIZE BUF
MOV CX,20
5,综合运算符 ( 合成操作符 )
功能:
1,由已有的操作数建立新的操作数;
2,新操作数和已有的操作数类型不一样
1) PTR运算符格式,类型 PTR 表达式例,INC WORD PTR [BX]
wx dw 1234h
mov al,byte ptr wx
mov ah,byte ptr wx+1
2) THIS操作符格式,THIS 类型 (或属性 )
例,FIRST EQU THIS BYTE
SECOND DW 100 DUP (?)
4,4汇编语言程序设计常用的汇编语言程序框架:
DATA SEGMENT ; 定义数据段
VAL1 DB 12H,8EH ; 定义变量
……
DATA ENDS ; 数据段结束
CODE SEGMENT ; 定义代码段
ASSUME DS:DATA,CS,CODE ; 段属性说明
START,MOV AX,DATA ; 初始化 DS
MOV DS,AX
……
MOV AX,4C00H ; 返回 DOS
INT 21H
CODE ENDS ; 代码段结束
END START ; 源程序结束
特点
程序分段
语句由指令性和指示性语句组成
两种程序框架一、汇编语言程序设计基本步骤
1,分析问题,确定模型?
2,确定算法?
3,绘制流程图?
4,编写程序?
5,检查和调试二、汇编语言程序的基本结构
1,顺序结构举例
完成
x1*x2?x3 x1:byte x2:word x3 34bit
2、分支结构举例
实现
10
00
10
x
yx
x
用查表法确定分支
a,对 8种产品进行编号 0,1,……7
b,每一个编号对应一个入口地址
proc0,proc1,……proc7
步骤:
a,把入口地址放在 Table开始的内存单元;
b,根据 key内容进行查表实现分支转移
3、循环结构举例
例 1、计算 y= 0+ 2+ 4+ …… + 1998
y?dxax
查找数组中是否由关键字,
有:变量 dd1= 1; dd2,关键字偏移量无:变量 dd1= 0
方法一、用 loopnz( loopne) 指令
方法二、用 loop指令
Call proc1
ret
实现方法
主程序有调用指令 call
子程序有返回指令 ret
特点
Call指令与 ret缺一不可
现场保护
入口出口参数设置
举例编写 AX*10?AX子程序
子程序编写
1、子程序组成
使用说明
a,子程序功能
b,使用寄存器情况
c,入口出口参数
程序体
入口出口参数传递
现场保护
功能程序段
2、现场保护和入口出口参数传递
( 1)、现场保护
方案一:在子程序中保护
方案二:在主程序中保护
( 2)、参数传递
寄存器传递
变量传递
堆栈传递
举例
1、数组元素求和
2、计算 N!
4.4 系统调用
一,PCDOS执行流程键盘命令命令处理程序文件管理基本输入 /输出
BIOS
用户程序用户程序
ROM
IBMBIO
IBMDOS
BIOS
IBMBIO
IBMDOS
二,DOS系统子程序功能
1、磁盘管理
2、内存管理
3、系统输入 /输出共 87个子程序
三、系统功能调用对 87个子程序进行编号,根据编号进行相关处理格式
1、入口参数
2、编号?ah
3,INT 21H
编号?ah
INT 21
ah=1
1号调用
ah=2
2号调用
常用的系统调用
1,1号调用-键盘输入
2,8号调用
3,5号调用-打印
4,6号调用-显示及输入
5,9号调用-输出字符
6,10号调用-输入字符串
4.5 宏定义与宏调用
一、宏定义和宏调用
1、格式宏指令名 macro [参数表 ]
… ;宏定义体
endm
2、优点
缩短源程序长度,但不减少代码长度;
程序易读
3、参数可以是多种形式
二、宏定义取消伪操作格式
purge 宏命令名 1,宏命令名 2,…
三、重复伪操作格式
rept <表达式 >;重复块
endm
四、不定重复伪操作格式
irp 形参,<参数表 >;重复块
endm
五、串重复伪操作格式
irpc 形参,<字符串 >;重复块
endm
条件汇编格式
if 表达式
…
else
…
endif
常用的汇编程序举例
1、找数组中的最大值
2、中值滤波
3、把一字节十六进制数转换为 ASCII码
4、排序
5、乘法
6、除法
7、二进制到十进制
8、十进制到二进制
编写子程序 bcddiv10,把 dx中的四位 bcd
码除 10,并四舍五入。
几个概念
8086汇编语言的语句
8086汇编中的伪指令
8086汇编中的运算符
汇编语言程序设计
宏定义与宏调用
系统调用几个概念
汇编语言
汇编语言源程序
汇编
汇编程序
4,1 8086汇编语言的语句汇编语言由指令性语句和指令性语句组成
一,指令性语句格式
[标号,] 操作码 [操作数 1,] [操作数 2] ; [注释 ]
二,指示性语句格式
[标识符 ( 名字 ) ] 指示符 ( 伪指令 ) 表达式
三,有关属性存储器操作数的属性有三种:段值,段内偏移量和类型 。
4,2 8086汇编中的伪指令
一,符号定义语句
1、等值语句格式:符号名 EQU 表达式例,⑴ PORT EQU 1234
⑵ BUFF EQU PORT+ 58
⑶ MEM EQU DS:[BP+ 20H]
⑷ COUNT EQU CX
⑸ ABC EQU AAA
2、等号语句格式,NUM= 34
……
NUM= 34+ 1
二、变量定义语句格式,符号名 DB/DW/DD 表达式
1、定义一组数据例 1,BUFF DW 1234H,0ABCDH,8EH
DW –79DH,7B6AH
2、定义一串字符例 2,STR DB ‘ Welcome !’
3、定义保留存储单元例 3,SUM DW?,?
4、复制操作复制操作符 DUP( Duplication) 可预置重复的数值例 4,ALL_ZERO DB 0,0,0,0,0
用复制操作可改为:
ALL_ZERO DB 5 DUP( 0)
5,将已定义的地址存入内存单元例 5,LIT DD CYC
…
CYC,MOV AX,BX
三、段定义语句
1,段定义语句格式:
段名 SEGMENT [定位类型 ] [组合类型 ] [‘类别’ ]
……
段名 ENDS
只需要掌握段名 SEGMENT
……
段名 ENDS
2、段假设语句
ASSUME 段寄存器名:段名 [,…]
3,ORG伪指令、地址计数器 $
ORG伪指令格式,ORG <表达式 >
4,END 表示源代码结束格式为,END 常数或表达式,
四、过程定义语句过程名 PROC NEAR/FAR
……
RET
过程名 ENDP
4,3 8086汇编中的运算符一,常用运算符
1,算术运算符
+ ( 加 ),- ( 减 ),*( 乘 ),/
( 除 ),MOD( 求余 ) 。
2,逻辑运算符
AND,OR,XOR,NOT
3,关系运算符
EQ( 相等 ),NE( 不等,)
LT( 小于 ),GT( 大于 ),
LE( 小于等于 ),GE( 大于等于 ) 。
关系成立,全 1
关系不成立,全 0
例,MOV DL,10H LT 16
例,AND AX,555 GT 222
二,常用的操作符
4,分析操作符
1) SEG操作符例,MOV AX,SEG BUFF
2) OFFSET操作符例,MOV BX,OFFSET BUFF
3) TYPE操作符对于变量有 3种,1 字节型;
2 字型;
4 双字型 ;
对于标号有 2种:- 1 NEAR( 段内 ),
- 2 FAR( 段间 ) 。
例,BUFF DB 20H
MOV BX,TYPE BUFF?
MOV BX,01
4) LENGTH操作符
5) SIZE操作符
SIZE= TYPE× LENGTH
例,BUFF DB 10DIP(?)
MOV CX,LENGTH BUF
MOV CX,10
MOV CX,SIZE BUF
MOV CX,20
5,综合运算符 ( 合成操作符 )
功能:
1,由已有的操作数建立新的操作数;
2,新操作数和已有的操作数类型不一样
1) PTR运算符格式,类型 PTR 表达式例,INC WORD PTR [BX]
wx dw 1234h
mov al,byte ptr wx
mov ah,byte ptr wx+1
2) THIS操作符格式,THIS 类型 (或属性 )
例,FIRST EQU THIS BYTE
SECOND DW 100 DUP (?)
4,4汇编语言程序设计常用的汇编语言程序框架:
DATA SEGMENT ; 定义数据段
VAL1 DB 12H,8EH ; 定义变量
……
DATA ENDS ; 数据段结束
CODE SEGMENT ; 定义代码段
ASSUME DS:DATA,CS,CODE ; 段属性说明
START,MOV AX,DATA ; 初始化 DS
MOV DS,AX
……
MOV AX,4C00H ; 返回 DOS
INT 21H
CODE ENDS ; 代码段结束
END START ; 源程序结束
特点
程序分段
语句由指令性和指示性语句组成
两种程序框架一、汇编语言程序设计基本步骤
1,分析问题,确定模型?
2,确定算法?
3,绘制流程图?
4,编写程序?
5,检查和调试二、汇编语言程序的基本结构
1,顺序结构举例
完成
x1*x2?x3 x1:byte x2:word x3 34bit
2、分支结构举例
实现
10
00
10
x
yx
x
用查表法确定分支
a,对 8种产品进行编号 0,1,……7
b,每一个编号对应一个入口地址
proc0,proc1,……proc7
步骤:
a,把入口地址放在 Table开始的内存单元;
b,根据 key内容进行查表实现分支转移
3、循环结构举例
例 1、计算 y= 0+ 2+ 4+ …… + 1998
y?dxax
查找数组中是否由关键字,
有:变量 dd1= 1; dd2,关键字偏移量无:变量 dd1= 0
方法一、用 loopnz( loopne) 指令
方法二、用 loop指令
Call proc1
ret
实现方法
主程序有调用指令 call
子程序有返回指令 ret
特点
Call指令与 ret缺一不可
现场保护
入口出口参数设置
举例编写 AX*10?AX子程序
子程序编写
1、子程序组成
使用说明
a,子程序功能
b,使用寄存器情况
c,入口出口参数
程序体
入口出口参数传递
现场保护
功能程序段
2、现场保护和入口出口参数传递
( 1)、现场保护
方案一:在子程序中保护
方案二:在主程序中保护
( 2)、参数传递
寄存器传递
变量传递
堆栈传递
举例
1、数组元素求和
2、计算 N!
4.4 系统调用
一,PCDOS执行流程键盘命令命令处理程序文件管理基本输入 /输出
BIOS
用户程序用户程序
ROM
IBMBIO
IBMDOS
BIOS
IBMBIO
IBMDOS
二,DOS系统子程序功能
1、磁盘管理
2、内存管理
3、系统输入 /输出共 87个子程序
三、系统功能调用对 87个子程序进行编号,根据编号进行相关处理格式
1、入口参数
2、编号?ah
3,INT 21H
编号?ah
INT 21
ah=1
1号调用
ah=2
2号调用
常用的系统调用
1,1号调用-键盘输入
2,8号调用
3,5号调用-打印
4,6号调用-显示及输入
5,9号调用-输出字符
6,10号调用-输入字符串
4.5 宏定义与宏调用
一、宏定义和宏调用
1、格式宏指令名 macro [参数表 ]
… ;宏定义体
endm
2、优点
缩短源程序长度,但不减少代码长度;
程序易读
3、参数可以是多种形式
二、宏定义取消伪操作格式
purge 宏命令名 1,宏命令名 2,…
三、重复伪操作格式
rept <表达式 >;重复块
endm
四、不定重复伪操作格式
irp 形参,<参数表 >;重复块
endm
五、串重复伪操作格式
irpc 形参,<字符串 >;重复块
endm
条件汇编格式
if 表达式
…
else
…
endif
常用的汇编程序举例
1、找数组中的最大值
2、中值滤波
3、把一字节十六进制数转换为 ASCII码
4、排序
5、乘法
6、除法
7、二进制到十进制
8、十进制到二进制
编写子程序 bcddiv10,把 dx中的四位 bcd
码除 10,并四舍五入。