宏汇编语言 (1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
(3)返回变量或标号的类型 TYPE 格式:TYPE 变量/标号
功能:返回变量类型:字节=1,字=2,双字=4;
返回标号类型:NEAR=—1,FAR=-2。
例:MOV AX,TYPE XYZ ;AX=2
(4)$运算符,返回汇编计数器的当前值。 用法:紧跟在DB,DW,·伪指令之后,统计出分配给某个变 · · 量的单元数。
7
2.常量
立即数:经汇编后转换成等值的二进制补码。如: 12,0A8H,10100000B,34Q,-2 字符串常数:经汇编后转换成相应的ASCII码。如: ‘A’,‘ABCD’,‘3’ 例: X DB ‘ABC’ ;相当于 X DB 41H,42H,43H MOV DL,‘1’ ;DL=31H 符号常数:用伪指令EQU或“=”定义。 例: COUNT EQU 55 POINTER = 2F8H ·· ·· ·· MOV CL,COUNT ;CL=55 MOV DX,POINTER ;DX=2H8H
8
5.2.2 运算符
1.数值运算符 (1)算术运算符有: +、—、*、/、MOD(模除,即取余) 例: MOV AX,8+5 ;汇编时完成运算,其值若出界给出错误信息。 MOV AX,31 MOD 5 ;AX=1 (2)逻辑运算符有: NOT:按位取反 例:MOV AL,NOT 10010011B;AL=01101100B AND:按位相与 例:MOV AL,37H AND 0FH ;AL=07H OR: 按位相或 例:MOV AL,7 OR 30H ;AL=37H XOR:按位异或 例:MOV 0AAH XOR 55H ;AL=0FFH HIGH:截取高8位 例:MOV AH,HIGH BX ;BH→AH LOW:截取低8位 例:MOV AL,LOW BX ;BL→AL
NE LE GE LT
X NE Y X LE Y XΒιβλιοθήκη BaiduGE Y X LT Y
GT
X GT Y
X> Y
为“真” MOV DL,X GT 25
注:关系运算符为“真”时,结果为“-1”(即全1),否则 为0。
10
2.修改类型属性的运算符——PTR运算符
格式: 类型的说明符 PTR 地址表达式 类型说明符有: BYTE(字节) WORD(字) PTR 内存操作数的5种寻址之一 DWORD(双字) NEAR(近) FAR(远) PTR 转移地址标号/过程名
6
标号和变量的3个属性
段属性:其所在的段基址,用SEG运算符可算出。 例:MOV AX,SEG BUF 偏移属性:用OFFSET运算符可算出其有效地址。 例:MOV BX,OFFSET BUF 类型属性: 变量的类型有: 字节型:用DB伪指令定义 字型: 用DW伪指令定义 双字型:用DD伪指令定义 四字型:用DQ伪指令定义 五字型:用DT伪指令定义 注:使用时,可用PTR运算符作临时性的修改 标号的类型有: NEAR(近):该类型标号是段内转移指令的目标地址 FAR(远):该类型标号是其他代码段转移指令的目标地址
19
2.段定义语句——即逻辑段的定界语句
格式: 段名 SEGMENT 段体 段名 设计: 各模块单独编译,单独汇编,生成各自的OBJ文件,然后 ENDS 定位参数 链接参数 ‘分类名’ 段长度 称为属性参数(可选)
属性参数为源程序的汇编、链接提供必要的信息,用于模块化
通过链接程序将各OBJ文件链接起来,生成一个EXE文件。
3
•在基本汇编的基础上,进一步允许在源程序中把一个指令 序列定义为一条宏指令,并包含有大量伪指令的汇编程序, 叫做宏汇编MASM(MacroAssembler)。它包含全部基本汇 编ASM的功能,还增加了宏指令、结构、记录等高级汇编语 言功能。
4
5.1 汇编程序的语句类型
1.汇编程序采用分段结构,每一段有若干语句组成。 2.语句分类: 指令性语句,即符号指令——通知CPU进行某种操作的命令, 由硬件完成其功能。 指示性语句,即伪指令——提供编译信息、链接信息,其功 能由相应的软件完成。 3.符号指令的书写格式: [标号:] 符号指令 [;注释] 4.伪指令的书写格式: [变量名] 伪指令 [;注释] 注:版本不同,伪指令的种类也略有不同。
不同模块之间,同名段如何链接、如何定位?
20
(1)定位参数(段对齐)——通知链接程序,逻辑 段的目标代码在存储器中如何存放
BYTE——段从任意字节开始 WORD——段从下一个字地址开始开始 DWORD——段从下一个双字地址开始开始 PARA(默认)——段从下一节地址开始(16个字节为 一节) PAGE——段从下一页地址开始(256字节为一页)
24
4.过程定义语句
格式: 过程名 PROC 属性参数 …… 过程实体 …… RET 过程名 ENDP 属性参数: NEAR(可缺省):与调用指令在同一个代码段中。 FAR(远过程):与调用指令不在同一个代码段中。
25
5.定位语句
格式: ORG 表达式 功能:通知汇编程序,从表达式给出的有效地址开始,依次存 放后继目标块。 例: CODE SEGMENT ASSUME CS:CODE ORG 100H BEG: JMP START ;有效地址BEG=100H BUF DB 12,34 START: ·· ·· · ·· ·· · MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束 END BEG ;汇编程序结束 26
《微机原理与接口技术》 第五章、第六章
主讲:方义秋
第5章 宏汇编语言
本章学习目标
通过本章的学习,应当掌握以下内容: •了解汇编语言的基本知识和特点。 •掌握宏汇编基本语法。 •掌握汇编语言常用伪指令的使用方法。 •熟悉宏汇编语言的程序结构、段定义以及语句的格式。
汇编语言与宏汇编语言
• 汇编语言是一种面向CPU指令系统的程序设计语言,它采用指 令助记符来表示操作码和操作数,用符号地址表示操作数地 址。 • 汇编语言编写的源程序在输入计算机后,需要将其翻译成目 标程序,计算机才能执行相应指令,这个翻译过程称为汇编, 完成汇编任务的程序称为汇编程序。 • 汇编程序是最早也是最成熟的一种系统软件,它除了能够将 汇编语言源程序翻译成机器语言程序这一主要功能外,还能 够根据用户的要求自动分配存储区域,包括程序区、数据区、 暂存区等;自动把各种进制数转换成二进制数,把字符转换 成ASCII码,计算表达式的值等;自动对源程序进行检查,给 出错误信息,如非法格式、未定义的助记符、标号、漏掉操 作 数 等 。 具 有 这 些 功 能 的 汇 编 程 序 称 为 基 本 汇 编 ASM (Assembler)。
5
5.2 宏汇编基本语法
5.2.1 标号、变量和常量 1.标号和变量——又称符号地址 标号——代表指令地址,定义在代码段,为转移指 令提供目标。 变量——代表内存操作数的存储地址,或者说变量 名就代表某个单元。定义在DS,ES,FS,GS,SS段。 命名规则:不能用保留字、仅能使用给定集合的符 号、不能用数字打头、最长不超过31个字符。
WNUM
34H 12H 38H 00H 42H 41H
43H
00H 00H 00H
17
5.4 宏汇编语言基本语法
本节主要解决程序的结构: 说明CPU的类型 定义逻辑段结构 说明段约定 定义过程 返回DOS系统 说明程序的结束
18
1.方式选择伪指令指明使用的CPU类型
格式及功能: .8086 ;只汇编8086、8088指令 .486 ;80486及以下实模式指令 .486P ;80486及以下全部指令 缺省 ;与设置.8086等价 位于源程序的第一条指令。
9
(3)关系运算符有:
运算符 EQ 格式 X EQ Y 说明 例 X=Y 为“真” MOV AX,X EQ 5 ;若 X=5 则 AX=0FFFFH 否 则 AX=0H X≠Y 为“真” MOV BL,X NE 25 X≤Y 为“真” MOV EAX,X LE 77 X≥Y 为“真” MOV DI,X GE 07H X< Y 为“真” MOV CX,X LT 25
23
3.段约定语句
格式: ASSUME 段寄存器:段名,·,段寄存器:段名 · · 功能:通知汇编程序,寻址逻辑段使用哪一个段寄存器,是非 执行语句。 例:ASSUME CS:CODE,DS:DATA 说明: 作为代码段的第一条语句。 除CS以外段寄存器的初值必须在程序中用指令设置。如: MOV AX,DATA 或 MOV AX,SEG DATA MOV DS,AX MOV DS,AX DOS把一个可执行程序(EXE文件)调用内存之后,自动地把程 序代码段的段基址赋给了CS。
15
3.字节定义的伪指令
格式:变量名 DB 一串用逗号间隔的单字节数 例: BUF1 DB 22H,5*6,10101010B ;BUF1为字节型的变量 DB 120,-5,0A6H,‘HELLO’ ;分配11个单元。 COUNT EQU $-BUF1 ;统计出BUF1变量的单元数→符号常数,COUNT=11 BUF2 DB ?,?,10 DUP(‘A’) ;?为随机数,共分配12单元。
11
3.返回属性或数值的运算符
(1)求某个逻辑段/变量/标号的段基址运算符SEG 格式: SEG 段名 【例】 MOV AX,SEG DATA ;AX=名为DATA逻辑段的段基址 MOV DS,AX 【例】 XYZ DW 1234H …… MOV AX,SEG XYZ ;AX=变量XYZ所在段的段基址 (2)取变量/标号的偏移地址运算符OFFSET 格式: OFFSET 变量名或标号 【例】 MOV BX,OFFSET XYZ ;BX=变量XYZ的偏移基址
21
(2)链接参数(组合)——用于控制LINK行为,指示在满足定 位方式的前提下,同名各模块如何组合 PRIVATE(默认):段不与其他同名段合并。 PUBLIC——段与其它同名段合并为单个连续段 MEMORY——与PUBLIC等价 COMMON——段与其它同名段“覆盖”组合成一个逻辑段,段长 为最长段长。 STACK——段与其它同名段组合成一个大堆栈段。 AT表达式——由表达式给出段基址。常与ORG伪指令配合,指定 存储单元。 例: DATA SEGMENT AT 0040H ;DATA段的段基址为0040H ORG 0017H ;指定KEY的偏移地址 KEY DB ? ;KEY的物理地址为0417H DATA ENDS
22
图5.1(书P.80)指出主模块+子模块在链接时,链接参 数的功能。 (3)’分类名’——用户指定,用来区别逻辑段 链接时,把不同模块中分类名相同的同名段组织成一 类,存放在邻近的存储区中。 (4)段长度 USE16——该逻辑段长度最大允许为64K,单元的有效 地址为16位,16位寻址方式 USE32——该逻辑段长度可以超过64K,单元的有效地 址为32位,32位寻址方式,段长4G。
例: XYZ
COUNT
DW
EQU
1234H,5678H
$-XYZ ;COUNT=4
13
4.方括号运算符和地址表达式
[地址表达式]——是内存操作数的常用寻址方式。 [下标]——表示用下标访问数据元素,直接寻址. 例: XYZ MOV DW 1234H,5678H ;BX=78H BX, XYZ[2]
14
5.3 数据定义的伪指令
1.等值伪指令 格式: 符号常数 EQU 表达式 例: XX EQU 22H ;XX代表22H 特点:符号常数在后继语句中不能更改。 2.等号伪指令 格式: 符号常数 = 表达式 例: XX = 22H ;XX代表22H, 特点:在后继语句中可以重新定义: XX=XX+1 注:符号常数可定义在任意逻辑段中,要先定义后使用。
16
4.字定义的伪指令
格式:变量名 DW 一串用逗号间隔的双字节数 功能:通知汇编程序,把所定义的双字节数从指定变量 开始依次存放。规律:低对低,高对高 例:WNUM DW 1234H,56,‘AB’,‘C’,? COUNT EQU $-WNUM ;COUNT=10 注:DW伪指令中的字符串常数,单引号内只能是一个或 两个字符,‘C’编译后为0043H。 5.多字节定义的伪指令 格式:变量名 DD/DF/DQ/DT 一串用逗号间隔的多 字节数 说明:伪指令DD/DF/DQ/DT 为所定义的每一个数, 分配4个、6个、8个、10个单元。 例5.3.1 (P.76)
(3)返回变量或标号的类型 TYPE 格式:TYPE 变量/标号
功能:返回变量类型:字节=1,字=2,双字=4;
返回标号类型:NEAR=—1,FAR=-2。
例:MOV AX,TYPE XYZ ;AX=2
(4)$运算符,返回汇编计数器的当前值。 用法:紧跟在DB,DW,·伪指令之后,统计出分配给某个变 · · 量的单元数。
7
2.常量
立即数:经汇编后转换成等值的二进制补码。如: 12,0A8H,10100000B,34Q,-2 字符串常数:经汇编后转换成相应的ASCII码。如: ‘A’,‘ABCD’,‘3’ 例: X DB ‘ABC’ ;相当于 X DB 41H,42H,43H MOV DL,‘1’ ;DL=31H 符号常数:用伪指令EQU或“=”定义。 例: COUNT EQU 55 POINTER = 2F8H ·· ·· ·· MOV CL,COUNT ;CL=55 MOV DX,POINTER ;DX=2H8H
8
5.2.2 运算符
1.数值运算符 (1)算术运算符有: +、—、*、/、MOD(模除,即取余) 例: MOV AX,8+5 ;汇编时完成运算,其值若出界给出错误信息。 MOV AX,31 MOD 5 ;AX=1 (2)逻辑运算符有: NOT:按位取反 例:MOV AL,NOT 10010011B;AL=01101100B AND:按位相与 例:MOV AL,37H AND 0FH ;AL=07H OR: 按位相或 例:MOV AL,7 OR 30H ;AL=37H XOR:按位异或 例:MOV 0AAH XOR 55H ;AL=0FFH HIGH:截取高8位 例:MOV AH,HIGH BX ;BH→AH LOW:截取低8位 例:MOV AL,LOW BX ;BL→AL
NE LE GE LT
X NE Y X LE Y XΒιβλιοθήκη BaiduGE Y X LT Y
GT
X GT Y
X> Y
为“真” MOV DL,X GT 25
注:关系运算符为“真”时,结果为“-1”(即全1),否则 为0。
10
2.修改类型属性的运算符——PTR运算符
格式: 类型的说明符 PTR 地址表达式 类型说明符有: BYTE(字节) WORD(字) PTR 内存操作数的5种寻址之一 DWORD(双字) NEAR(近) FAR(远) PTR 转移地址标号/过程名
6
标号和变量的3个属性
段属性:其所在的段基址,用SEG运算符可算出。 例:MOV AX,SEG BUF 偏移属性:用OFFSET运算符可算出其有效地址。 例:MOV BX,OFFSET BUF 类型属性: 变量的类型有: 字节型:用DB伪指令定义 字型: 用DW伪指令定义 双字型:用DD伪指令定义 四字型:用DQ伪指令定义 五字型:用DT伪指令定义 注:使用时,可用PTR运算符作临时性的修改 标号的类型有: NEAR(近):该类型标号是段内转移指令的目标地址 FAR(远):该类型标号是其他代码段转移指令的目标地址
19
2.段定义语句——即逻辑段的定界语句
格式: 段名 SEGMENT 段体 段名 设计: 各模块单独编译,单独汇编,生成各自的OBJ文件,然后 ENDS 定位参数 链接参数 ‘分类名’ 段长度 称为属性参数(可选)
属性参数为源程序的汇编、链接提供必要的信息,用于模块化
通过链接程序将各OBJ文件链接起来,生成一个EXE文件。
3
•在基本汇编的基础上,进一步允许在源程序中把一个指令 序列定义为一条宏指令,并包含有大量伪指令的汇编程序, 叫做宏汇编MASM(MacroAssembler)。它包含全部基本汇 编ASM的功能,还增加了宏指令、结构、记录等高级汇编语 言功能。
4
5.1 汇编程序的语句类型
1.汇编程序采用分段结构,每一段有若干语句组成。 2.语句分类: 指令性语句,即符号指令——通知CPU进行某种操作的命令, 由硬件完成其功能。 指示性语句,即伪指令——提供编译信息、链接信息,其功 能由相应的软件完成。 3.符号指令的书写格式: [标号:] 符号指令 [;注释] 4.伪指令的书写格式: [变量名] 伪指令 [;注释] 注:版本不同,伪指令的种类也略有不同。
不同模块之间,同名段如何链接、如何定位?
20
(1)定位参数(段对齐)——通知链接程序,逻辑 段的目标代码在存储器中如何存放
BYTE——段从任意字节开始 WORD——段从下一个字地址开始开始 DWORD——段从下一个双字地址开始开始 PARA(默认)——段从下一节地址开始(16个字节为 一节) PAGE——段从下一页地址开始(256字节为一页)
24
4.过程定义语句
格式: 过程名 PROC 属性参数 …… 过程实体 …… RET 过程名 ENDP 属性参数: NEAR(可缺省):与调用指令在同一个代码段中。 FAR(远过程):与调用指令不在同一个代码段中。
25
5.定位语句
格式: ORG 表达式 功能:通知汇编程序,从表达式给出的有效地址开始,依次存 放后继目标块。 例: CODE SEGMENT ASSUME CS:CODE ORG 100H BEG: JMP START ;有效地址BEG=100H BUF DB 12,34 START: ·· ·· · ·· ·· · MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束 END BEG ;汇编程序结束 26
《微机原理与接口技术》 第五章、第六章
主讲:方义秋
第5章 宏汇编语言
本章学习目标
通过本章的学习,应当掌握以下内容: •了解汇编语言的基本知识和特点。 •掌握宏汇编基本语法。 •掌握汇编语言常用伪指令的使用方法。 •熟悉宏汇编语言的程序结构、段定义以及语句的格式。
汇编语言与宏汇编语言
• 汇编语言是一种面向CPU指令系统的程序设计语言,它采用指 令助记符来表示操作码和操作数,用符号地址表示操作数地 址。 • 汇编语言编写的源程序在输入计算机后,需要将其翻译成目 标程序,计算机才能执行相应指令,这个翻译过程称为汇编, 完成汇编任务的程序称为汇编程序。 • 汇编程序是最早也是最成熟的一种系统软件,它除了能够将 汇编语言源程序翻译成机器语言程序这一主要功能外,还能 够根据用户的要求自动分配存储区域,包括程序区、数据区、 暂存区等;自动把各种进制数转换成二进制数,把字符转换 成ASCII码,计算表达式的值等;自动对源程序进行检查,给 出错误信息,如非法格式、未定义的助记符、标号、漏掉操 作 数 等 。 具 有 这 些 功 能 的 汇 编 程 序 称 为 基 本 汇 编 ASM (Assembler)。
5
5.2 宏汇编基本语法
5.2.1 标号、变量和常量 1.标号和变量——又称符号地址 标号——代表指令地址,定义在代码段,为转移指 令提供目标。 变量——代表内存操作数的存储地址,或者说变量 名就代表某个单元。定义在DS,ES,FS,GS,SS段。 命名规则:不能用保留字、仅能使用给定集合的符 号、不能用数字打头、最长不超过31个字符。
WNUM
34H 12H 38H 00H 42H 41H
43H
00H 00H 00H
17
5.4 宏汇编语言基本语法
本节主要解决程序的结构: 说明CPU的类型 定义逻辑段结构 说明段约定 定义过程 返回DOS系统 说明程序的结束
18
1.方式选择伪指令指明使用的CPU类型
格式及功能: .8086 ;只汇编8086、8088指令 .486 ;80486及以下实模式指令 .486P ;80486及以下全部指令 缺省 ;与设置.8086等价 位于源程序的第一条指令。
9
(3)关系运算符有:
运算符 EQ 格式 X EQ Y 说明 例 X=Y 为“真” MOV AX,X EQ 5 ;若 X=5 则 AX=0FFFFH 否 则 AX=0H X≠Y 为“真” MOV BL,X NE 25 X≤Y 为“真” MOV EAX,X LE 77 X≥Y 为“真” MOV DI,X GE 07H X< Y 为“真” MOV CX,X LT 25
23
3.段约定语句
格式: ASSUME 段寄存器:段名,·,段寄存器:段名 · · 功能:通知汇编程序,寻址逻辑段使用哪一个段寄存器,是非 执行语句。 例:ASSUME CS:CODE,DS:DATA 说明: 作为代码段的第一条语句。 除CS以外段寄存器的初值必须在程序中用指令设置。如: MOV AX,DATA 或 MOV AX,SEG DATA MOV DS,AX MOV DS,AX DOS把一个可执行程序(EXE文件)调用内存之后,自动地把程 序代码段的段基址赋给了CS。
15
3.字节定义的伪指令
格式:变量名 DB 一串用逗号间隔的单字节数 例: BUF1 DB 22H,5*6,10101010B ;BUF1为字节型的变量 DB 120,-5,0A6H,‘HELLO’ ;分配11个单元。 COUNT EQU $-BUF1 ;统计出BUF1变量的单元数→符号常数,COUNT=11 BUF2 DB ?,?,10 DUP(‘A’) ;?为随机数,共分配12单元。
11
3.返回属性或数值的运算符
(1)求某个逻辑段/变量/标号的段基址运算符SEG 格式: SEG 段名 【例】 MOV AX,SEG DATA ;AX=名为DATA逻辑段的段基址 MOV DS,AX 【例】 XYZ DW 1234H …… MOV AX,SEG XYZ ;AX=变量XYZ所在段的段基址 (2)取变量/标号的偏移地址运算符OFFSET 格式: OFFSET 变量名或标号 【例】 MOV BX,OFFSET XYZ ;BX=变量XYZ的偏移基址
21
(2)链接参数(组合)——用于控制LINK行为,指示在满足定 位方式的前提下,同名各模块如何组合 PRIVATE(默认):段不与其他同名段合并。 PUBLIC——段与其它同名段合并为单个连续段 MEMORY——与PUBLIC等价 COMMON——段与其它同名段“覆盖”组合成一个逻辑段,段长 为最长段长。 STACK——段与其它同名段组合成一个大堆栈段。 AT表达式——由表达式给出段基址。常与ORG伪指令配合,指定 存储单元。 例: DATA SEGMENT AT 0040H ;DATA段的段基址为0040H ORG 0017H ;指定KEY的偏移地址 KEY DB ? ;KEY的物理地址为0417H DATA ENDS
22
图5.1(书P.80)指出主模块+子模块在链接时,链接参 数的功能。 (3)’分类名’——用户指定,用来区别逻辑段 链接时,把不同模块中分类名相同的同名段组织成一 类,存放在邻近的存储区中。 (4)段长度 USE16——该逻辑段长度最大允许为64K,单元的有效 地址为16位,16位寻址方式 USE32——该逻辑段长度可以超过64K,单元的有效地 址为32位,32位寻址方式,段长4G。
例: XYZ
COUNT
DW
EQU
1234H,5678H
$-XYZ ;COUNT=4
13
4.方括号运算符和地址表达式
[地址表达式]——是内存操作数的常用寻址方式。 [下标]——表示用下标访问数据元素,直接寻址. 例: XYZ MOV DW 1234H,5678H ;BX=78H BX, XYZ[2]
14
5.3 数据定义的伪指令
1.等值伪指令 格式: 符号常数 EQU 表达式 例: XX EQU 22H ;XX代表22H 特点:符号常数在后继语句中不能更改。 2.等号伪指令 格式: 符号常数 = 表达式 例: XX = 22H ;XX代表22H, 特点:在后继语句中可以重新定义: XX=XX+1 注:符号常数可定义在任意逻辑段中,要先定义后使用。
16
4.字定义的伪指令
格式:变量名 DW 一串用逗号间隔的双字节数 功能:通知汇编程序,把所定义的双字节数从指定变量 开始依次存放。规律:低对低,高对高 例:WNUM DW 1234H,56,‘AB’,‘C’,? COUNT EQU $-WNUM ;COUNT=10 注:DW伪指令中的字符串常数,单引号内只能是一个或 两个字符,‘C’编译后为0043H。 5.多字节定义的伪指令 格式:变量名 DD/DF/DQ/DT 一串用逗号间隔的多 字节数 说明:伪指令DD/DF/DQ/DT 为所定义的每一个数, 分配4个、6个、8个、10个单元。 例5.3.1 (P.76)