微机原理与接口技术(第3版)汇编语言程序设计(4.1)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
47
等价于
分析操作符
TYPE LENGTH SIZE 取变量的类型 计算所定义存储区中的单元 计算所定义存储区的字节数
存储器段单元类型对应值: 存储单元类型 对应值 字节 1 字 2 双字 4
48
分析操作符
例:若ABC存储区是用如下伪指令定义 ABC DW 100 DUP(?) 则: TYPE ABC 等于2 LENGTH ABC 等于100 SIZE ABC 等于200
9
操作码、指示符
操作码 命令CPU要完成的操作 例: MOV AX, 100 指示汇编程序要完成的操作。 伪指令指示符 例: data 用来定义变量,分配存储单元, 指示程序开始和结束等 SEGMENT → data与一段值 对应
10
注释
用分号作为注释的开始; 用于说明程序或语句的功能,以便于 阅读和理解
4
汇编程序
汇编语言源程序
用助记符编写
汇编语言 源程序 机器语言 目标程序
汇编程序
源程序的编译程序
5
4.1 8086汇编语言的语句
语句的种类
指令语句
CPU执行的语句, 能够生成目标代码
伪指令语句
CPU不执行,而由汇 编程序执行的语句, 不生成目标代码
6
指令性语句格式
指令语句:
[标号:] 操作码 [操作数1],[操作数2] [ ;注释]
功能 P132例
可执行程序结束语句 格式: END [标号]
汇编程序在对源程序进行汇编的过程中如遇 到END,源程序到此结束,此后的内容将被 认为不属于本程序的范畴
39
一个完整源程序结构例
DSEG DATA1 DATA2 DSEG ESEG ESEG SSEG SSEG SEGMENT DB 1,2, DW 1234H ENDS SEGMENT DB 20 DUP(?) ENDS SEGMENT STACK ‘STACK’ DB 200 DUP(?) ENDS
19
2.等号语句
格式 符号名 = 表达式 操作: 用符号名取代后边的表达式,可重新定义 例: NUM=34 NUM=34+1
20
4.2.2.
变量定义伪指令
用于定义数据区中变量的类型 格式: 符号名 伪指令助记符 表达式… ;注释
某些情况 下可省略
可选
21
变量定义语句
伪指令助记符
DB DW DD DQ DT 定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10132例
过程定义语句
过程体内的最后一条指令总是返回指令 POROC和ENDP总是成对出现,这两条 伪指令中间的内容为一个过程(子程序) 过程子程序头部标有FAR,产生段间调 用。 过程子程序头部标有NEAR产生段内调 用。
38
4.2.5结束伪指令
编辑程序结束语句 格式: END
OFFSET
SEG TYPE SIZE LENGTH
46
4.分析操作符
OFFSET 取得其后变量或标号的偏移地址 SEG 取得其后变量或标号的段地址 例: MOV BX,OFFSET DATA LEA BX,DATA 例:MOV AX,SEG ABC MOV DS,AX ; 使DS中存放对应于 ABC的段地址
51
综合运算符
例:FIRST EQU THIS BYTE SECOND DW 100 DUP(?) FIRST的偏移地址= SECOND的偏移地 址 FIRST是字节型; SECOND是字型
52
40
一个完整源程序结构例
CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX ┇ 源程序 CSEG ENDS 代码 END START
49
5. 综合运算符
属性运算符PTR
用于指定其后存储器操作数的类型,通常 和BYTE、WORD等连用
例:
MOV BYTR PTR[1000],0 INC WORD PTR[BX]
50
综合运算符
THIS操作符 格式 THIS
类型(或属性)
用于指定存储器的类型。 所建立的存储器操作数地址与 下一个存储单元地址相同
14
4.2 8086汇编语言中的伪指令
掌握: 伪指令的格式及实现的操作 伪指令的应用
15
伪指令
由汇编程序执行的“指令系统” 用于对数据进行定义、为变量分配存 储区、定义一个逻辑段或一个过程、 指示程序结束等
16
4.2 基本伪指令语句
符号定义语句 变量定义语句 段定义语句 过程定义语句 结束语句
MEM1 DB 34H,’A’,?,?,? DW 20 DUP(?)
预留40个字节单元
28
5.将已定义的地址
存入内存单元
将变量、标号或过程名的段地址和偏移地址保 存到存储单元 例: LIT DD CYC;将标号CYC的段地 址和偏移地址保存 到以LIT开始的4 个字节单元 ……. CYC: MOV AX, BX
41
4.3 8086汇编语中的运算符
4.3.1 常用运算符和操作符 1.算术运算符 2.逻辑运算符 3.关系运算符
42
算术运算和逻辑运算符
算术运算符 +,-,*,/,MOD 逻辑运算符 AND,OR,NOT,XOR 例:MOV AL,8 AND 4 MOV AL,8+4-1
43
关系运算符
参与关系运算的必须是两个数值, 关系运算符不单独使用,与逻辑运算符组合使用 关系不成立,结果为0;关系成立,结果为FFFFH EQ:相等 NE:不等 LT:小于 GT:大于 LE:小于等于 GE:大于等于
32
段定义伪指令例
DATA SEGMENT PUBLIC ‘CODE’ MEM1 DB 11H,22H DATA ENDS
33
2.段假设语句
说明所定义逻辑段的性质 格式: ASSUME 段寄存器名:段名 [,段寄存器名:段名,…] 段寄存器可以是 CS、DS、SS、ES
34
段假设语句
ASSUME告诉汇编程序,哪一个段为数 据段,哪一个段为堆栈段,哪一个段为 代码段。 ASSUME指定某段分配给那个段寄存 器。 除CS以外,各个段寄存器的实际值还要 MOV指令来赋予。
17
4.2.1符号定义语句
1.等值语句
格式: 符号名 EQU 表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: PORT EQU 1234 BUFF EQU PORT+58
EQU说明的表达式不占用内存空间
18
等值语句
MEM EQU DS:[BP+20H] ;MEM等效于加 段前缀的BP基址 COUNT EQU CX ;COUNT等效于CX ABC EQU AAA ;把ABC定义为调整 指令AAA EQU语句给符号名定义一个值,或定义为别的 符号名,甚至可以定义为一条可执行的指令。
22
1.数据定义伪指令
伪指令助记符
DB DW DD DQ DT 定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10字节型
23
1. 定义一组数据
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
41H 42H 43H 44H 66H ‘A’ ‘B’ ‘C’ ‘D’
26
4.复制操作
为一个数据区的各单元设置相同的初值 格式: [变量名] 伪指令助记符 n DUP(初值,…) 例: BW 20 DUP(0) DB 3 DUP(22H,11H,?)
27
随机数
3.定义保留存储单元
用?预留存储空间
44
常用运算符与操作符应用举例
例:MOV DL,PORT LT 16; 如果PORT小于16,关系式成立,汇编后的代 码相当于指令: MOV DL, 0FFFFH 如果PORT不小于16,关系式不成立,汇编后 的代码相当于指令: MOV DL, 0
45
4.分析操作符
利用分析操作符可以把一个存储单元地址分解 为段地址和偏移量 8086的分析操作符有:
1
主要内容
8086汇编语言语言的语句 8086汇编语言中的伪指令 8086汇编语言中的运算符 汇编语言程序设计 宏定义与宏调用 汇编语言程序设计实例与上机调试
2
概述
了解: 计算机的三种语言 源程序的结构 汇编语言语句格式
3
计算机设计语言
面向机器 的语言
机器语言 汇编语言 高级语言
机器语言 汇编语言 高级语言
35
3.定位伪指令ORG与
地址计数器﹩
ORG ----- 段内程序代码或变量的起始偏移地址 格式: ORG 表达式 例:ORG 2000H
计算值为 非负常数
﹩-----地址计数器的值
汇编指令在汇编是给出一个隐含的地址计数器 ﹩为当前使用的存储单元的偏移量地址
36
4.2.4过程定义语句
过程的含义等同于子程序,可被其他程序调 用。过程定义语句用于定义一个过程体 格式: 过程名 PROC [ NEAR / FAR ] ┇ RET 过程名 ENDP
29
4.2.3段定义伪指令
说明逻辑段的起始和结束; 按段来组织程序和使用存储器
30
1.段定义语句格式
段名 SEGMENT [定位类型] [组合类型] [’类别’]
┇
段名 ENDS
说明逻辑 段的起点 说明不同模块中同名 段的组和连接方式
31
段定义语句
SEGMENT与ENDS总是成对使用 SEGMENT与ENDS可以将汇编语言源程序分成几 个段,通常分为数据段、堆栈段代码段 SEGMENT与ENDS前的段名可以是任意的,但配 对使用的SEGMENT和ENDS前的段名必须一致
第4 章
汇编语言程序设计
4.1 8086汇编语言的语句 4.1.1 指令性语句格式 4.2.2 指示性语句格式 4.1.3 有关属性 4.2 8086汇编语言中的伪语句 4.2.1 符号定义语句 4.2.2 变量定义语句 4.2.3 段定义语句 4.2.4 过程定义语句 4.2.5 结束语句 4.38086汇编语言中的运算符 4.3.1 常用运算符和操作符 4.3.2 运算符的优先级别 4. 4汇编语言程序设计 4.4.1 汇编语言程序设计基本步骤 4.4.2汇编语言程序的基本结构 4.5 宏定义与宏调用 4.6 汇编语言程序设计与上机调试 4.6.1 汇编语言程序设计实例 4.6.2 DOS功能调用与子程序设计 4.6.3 汇编语言程序上机调试
以上变量在内存 中的存放形式
24
2定义一字符串
STR DB ’Welcome!’ 注释:STR为字节型变量; ‘’——内为字符串; 字符在内存中以ASCⅡ码形式存放 定义字符串必须用DB伪指令
25
数据定义伪指令
伪指令的性质决定所定义变量的属性; 定义字符串必须用DB伪指令 例: DATA1 DB ‘ABCD’,66H
11
语句中的操作数
常数 寄存器 标号 变量 表达式
12
常数
数字常量 字符串常量:用引号引起的字符或 字符串 例:‘A’,’ABCD’
汇编时被译成对应的ASCII 码41H,42H,43H,44H
13
有关属性(变 量)
变量代表内存中的数据区,程序中视为存 储器操作数 存储器操作数的属性: 段 值 偏移量 类 型 变量所在段的段地址 变量单元地址与段首地址之 间的位移量。 字节型、字型和双字型
指令的符号地址 标号后要有冒号 助记符 注释前加分号
7
指示性语句格式
[标识符(名字)] 指示符(伪指令) 表达式 [ ;注释]
变量的符号地址 其后不加冒号
指示性语句中至 少有一个操作数
8
标号、标识符
标号后有冒号,用在指令性语句前;标识符后 不加冒号,用在指示性语句前。 英文字母、数字及专用字符组成,最大长度不 能超过31个,且不能由数字打头,不能用保留字 (如寄存器名,指令助记符,伪指令)。
等价于
分析操作符
TYPE LENGTH SIZE 取变量的类型 计算所定义存储区中的单元 计算所定义存储区的字节数
存储器段单元类型对应值: 存储单元类型 对应值 字节 1 字 2 双字 4
48
分析操作符
例:若ABC存储区是用如下伪指令定义 ABC DW 100 DUP(?) 则: TYPE ABC 等于2 LENGTH ABC 等于100 SIZE ABC 等于200
9
操作码、指示符
操作码 命令CPU要完成的操作 例: MOV AX, 100 指示汇编程序要完成的操作。 伪指令指示符 例: data 用来定义变量,分配存储单元, 指示程序开始和结束等 SEGMENT → data与一段值 对应
10
注释
用分号作为注释的开始; 用于说明程序或语句的功能,以便于 阅读和理解
4
汇编程序
汇编语言源程序
用助记符编写
汇编语言 源程序 机器语言 目标程序
汇编程序
源程序的编译程序
5
4.1 8086汇编语言的语句
语句的种类
指令语句
CPU执行的语句, 能够生成目标代码
伪指令语句
CPU不执行,而由汇 编程序执行的语句, 不生成目标代码
6
指令性语句格式
指令语句:
[标号:] 操作码 [操作数1],[操作数2] [ ;注释]
功能 P132例
可执行程序结束语句 格式: END [标号]
汇编程序在对源程序进行汇编的过程中如遇 到END,源程序到此结束,此后的内容将被 认为不属于本程序的范畴
39
一个完整源程序结构例
DSEG DATA1 DATA2 DSEG ESEG ESEG SSEG SSEG SEGMENT DB 1,2, DW 1234H ENDS SEGMENT DB 20 DUP(?) ENDS SEGMENT STACK ‘STACK’ DB 200 DUP(?) ENDS
19
2.等号语句
格式 符号名 = 表达式 操作: 用符号名取代后边的表达式,可重新定义 例: NUM=34 NUM=34+1
20
4.2.2.
变量定义伪指令
用于定义数据区中变量的类型 格式: 符号名 伪指令助记符 表达式… ;注释
某些情况 下可省略
可选
21
变量定义语句
伪指令助记符
DB DW DD DQ DT 定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10132例
过程定义语句
过程体内的最后一条指令总是返回指令 POROC和ENDP总是成对出现,这两条 伪指令中间的内容为一个过程(子程序) 过程子程序头部标有FAR,产生段间调 用。 过程子程序头部标有NEAR产生段内调 用。
38
4.2.5结束伪指令
编辑程序结束语句 格式: END
OFFSET
SEG TYPE SIZE LENGTH
46
4.分析操作符
OFFSET 取得其后变量或标号的偏移地址 SEG 取得其后变量或标号的段地址 例: MOV BX,OFFSET DATA LEA BX,DATA 例:MOV AX,SEG ABC MOV DS,AX ; 使DS中存放对应于 ABC的段地址
51
综合运算符
例:FIRST EQU THIS BYTE SECOND DW 100 DUP(?) FIRST的偏移地址= SECOND的偏移地 址 FIRST是字节型; SECOND是字型
52
40
一个完整源程序结构例
CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX ┇ 源程序 CSEG ENDS 代码 END START
49
5. 综合运算符
属性运算符PTR
用于指定其后存储器操作数的类型,通常 和BYTE、WORD等连用
例:
MOV BYTR PTR[1000],0 INC WORD PTR[BX]
50
综合运算符
THIS操作符 格式 THIS
类型(或属性)
用于指定存储器的类型。 所建立的存储器操作数地址与 下一个存储单元地址相同
14
4.2 8086汇编语言中的伪指令
掌握: 伪指令的格式及实现的操作 伪指令的应用
15
伪指令
由汇编程序执行的“指令系统” 用于对数据进行定义、为变量分配存 储区、定义一个逻辑段或一个过程、 指示程序结束等
16
4.2 基本伪指令语句
符号定义语句 变量定义语句 段定义语句 过程定义语句 结束语句
MEM1 DB 34H,’A’,?,?,? DW 20 DUP(?)
预留40个字节单元
28
5.将已定义的地址
存入内存单元
将变量、标号或过程名的段地址和偏移地址保 存到存储单元 例: LIT DD CYC;将标号CYC的段地 址和偏移地址保存 到以LIT开始的4 个字节单元 ……. CYC: MOV AX, BX
41
4.3 8086汇编语中的运算符
4.3.1 常用运算符和操作符 1.算术运算符 2.逻辑运算符 3.关系运算符
42
算术运算和逻辑运算符
算术运算符 +,-,*,/,MOD 逻辑运算符 AND,OR,NOT,XOR 例:MOV AL,8 AND 4 MOV AL,8+4-1
43
关系运算符
参与关系运算的必须是两个数值, 关系运算符不单独使用,与逻辑运算符组合使用 关系不成立,结果为0;关系成立,结果为FFFFH EQ:相等 NE:不等 LT:小于 GT:大于 LE:小于等于 GE:大于等于
32
段定义伪指令例
DATA SEGMENT PUBLIC ‘CODE’ MEM1 DB 11H,22H DATA ENDS
33
2.段假设语句
说明所定义逻辑段的性质 格式: ASSUME 段寄存器名:段名 [,段寄存器名:段名,…] 段寄存器可以是 CS、DS、SS、ES
34
段假设语句
ASSUME告诉汇编程序,哪一个段为数 据段,哪一个段为堆栈段,哪一个段为 代码段。 ASSUME指定某段分配给那个段寄存 器。 除CS以外,各个段寄存器的实际值还要 MOV指令来赋予。
17
4.2.1符号定义语句
1.等值语句
格式: 符号名 EQU 表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: PORT EQU 1234 BUFF EQU PORT+58
EQU说明的表达式不占用内存空间
18
等值语句
MEM EQU DS:[BP+20H] ;MEM等效于加 段前缀的BP基址 COUNT EQU CX ;COUNT等效于CX ABC EQU AAA ;把ABC定义为调整 指令AAA EQU语句给符号名定义一个值,或定义为别的 符号名,甚至可以定义为一条可执行的指令。
22
1.数据定义伪指令
伪指令助记符
DB DW DD DQ DT 定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10字节型
23
1. 定义一组数据
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
41H 42H 43H 44H 66H ‘A’ ‘B’ ‘C’ ‘D’
26
4.复制操作
为一个数据区的各单元设置相同的初值 格式: [变量名] 伪指令助记符 n DUP(初值,…) 例: BW 20 DUP(0) DB 3 DUP(22H,11H,?)
27
随机数
3.定义保留存储单元
用?预留存储空间
44
常用运算符与操作符应用举例
例:MOV DL,PORT LT 16; 如果PORT小于16,关系式成立,汇编后的代 码相当于指令: MOV DL, 0FFFFH 如果PORT不小于16,关系式不成立,汇编后 的代码相当于指令: MOV DL, 0
45
4.分析操作符
利用分析操作符可以把一个存储单元地址分解 为段地址和偏移量 8086的分析操作符有:
1
主要内容
8086汇编语言语言的语句 8086汇编语言中的伪指令 8086汇编语言中的运算符 汇编语言程序设计 宏定义与宏调用 汇编语言程序设计实例与上机调试
2
概述
了解: 计算机的三种语言 源程序的结构 汇编语言语句格式
3
计算机设计语言
面向机器 的语言
机器语言 汇编语言 高级语言
机器语言 汇编语言 高级语言
35
3.定位伪指令ORG与
地址计数器﹩
ORG ----- 段内程序代码或变量的起始偏移地址 格式: ORG 表达式 例:ORG 2000H
计算值为 非负常数
﹩-----地址计数器的值
汇编指令在汇编是给出一个隐含的地址计数器 ﹩为当前使用的存储单元的偏移量地址
36
4.2.4过程定义语句
过程的含义等同于子程序,可被其他程序调 用。过程定义语句用于定义一个过程体 格式: 过程名 PROC [ NEAR / FAR ] ┇ RET 过程名 ENDP
29
4.2.3段定义伪指令
说明逻辑段的起始和结束; 按段来组织程序和使用存储器
30
1.段定义语句格式
段名 SEGMENT [定位类型] [组合类型] [’类别’]
┇
段名 ENDS
说明逻辑 段的起点 说明不同模块中同名 段的组和连接方式
31
段定义语句
SEGMENT与ENDS总是成对使用 SEGMENT与ENDS可以将汇编语言源程序分成几 个段,通常分为数据段、堆栈段代码段 SEGMENT与ENDS前的段名可以是任意的,但配 对使用的SEGMENT和ENDS前的段名必须一致
第4 章
汇编语言程序设计
4.1 8086汇编语言的语句 4.1.1 指令性语句格式 4.2.2 指示性语句格式 4.1.3 有关属性 4.2 8086汇编语言中的伪语句 4.2.1 符号定义语句 4.2.2 变量定义语句 4.2.3 段定义语句 4.2.4 过程定义语句 4.2.5 结束语句 4.38086汇编语言中的运算符 4.3.1 常用运算符和操作符 4.3.2 运算符的优先级别 4. 4汇编语言程序设计 4.4.1 汇编语言程序设计基本步骤 4.4.2汇编语言程序的基本结构 4.5 宏定义与宏调用 4.6 汇编语言程序设计与上机调试 4.6.1 汇编语言程序设计实例 4.6.2 DOS功能调用与子程序设计 4.6.3 汇编语言程序上机调试
以上变量在内存 中的存放形式
24
2定义一字符串
STR DB ’Welcome!’ 注释:STR为字节型变量; ‘’——内为字符串; 字符在内存中以ASCⅡ码形式存放 定义字符串必须用DB伪指令
25
数据定义伪指令
伪指令的性质决定所定义变量的属性; 定义字符串必须用DB伪指令 例: DATA1 DB ‘ABCD’,66H
11
语句中的操作数
常数 寄存器 标号 变量 表达式
12
常数
数字常量 字符串常量:用引号引起的字符或 字符串 例:‘A’,’ABCD’
汇编时被译成对应的ASCII 码41H,42H,43H,44H
13
有关属性(变 量)
变量代表内存中的数据区,程序中视为存 储器操作数 存储器操作数的属性: 段 值 偏移量 类 型 变量所在段的段地址 变量单元地址与段首地址之 间的位移量。 字节型、字型和双字型
指令的符号地址 标号后要有冒号 助记符 注释前加分号
7
指示性语句格式
[标识符(名字)] 指示符(伪指令) 表达式 [ ;注释]
变量的符号地址 其后不加冒号
指示性语句中至 少有一个操作数
8
标号、标识符
标号后有冒号,用在指令性语句前;标识符后 不加冒号,用在指示性语句前。 英文字母、数字及专用字符组成,最大长度不 能超过31个,且不能由数字打头,不能用保留字 (如寄存器名,指令助记符,伪指令)。