汇编语言教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学进程
5.1.3 伪指令语句 4. 过程定义伪指令 格式: 过程名 PROC …… 过程体
APRC START:
例: CODE SEGMENT
APRC
RET
过程名 ENDP
功能:完成过程定义,在过程体
中实现过程的操作功能。
CODE
PROC ADD …… RET ENDP MOV CALL …… ENDS END
MOV
CX,08FH OR F8H
;CX=0FFHS
教学进程
5.1.2 汇编语言语句 ● 4. 数值回送操作符
● 求变量或标号类型值
格式:TYPE 变量或标号 功能:若为变量,则程序将回送该变量以字节数表示的类型: DB为1,DW为2,DD为4,DQ为8,DT为10。 若为标号,则程序将回送代表该标号类型的数值: NEAR 为-1,FRA为-2。 例:
●取段基地址
格式:SEG 变量或标号 功能:返回变量或标号所在段的段地址 例: MOV DX SEG LABEL; AX=1000H
教学进程
● 4.数值回送操作符
● 取变量单元数
5.1.2 汇编语言语句
格式:LENGTH 变量 功能:如果变量是用 DUP 说明,则返回 DUP 定义变量的重 复次数,否则,返回值为1。
特定功能的语句,主要由机器指令组成。在汇编时一条
指令语句被翻译成对应的机器码,对应着特定的操作。 伪指令语句: 伪指令语句是为汇编程序和连接程序提供一些必要控制的 管理性语句,它不产生目标代码,仅仅在汇编过程中告诉 汇编程序应如何汇编,并完成相应的伪操作。 宏指令语句: 宏指令语句是由编程者按照一定的规则来定义的一种较 “宏大”的指令,可包括多条指令或伪指令。
教学进程
5.1.3 伪指令语句 段定义伪指令举例 例: * * * * * * * * * * * * * * * * * * * * * * * data_seg1 segment ;定义数据段 …… data_seg1 ends *********************** code_seg segment ;定义代码段 assume ds:data_seg1, es:data_seg1 assume cs:code_seg start: ;程序执行的起始地址 mov ax, data_seg1 ;数据段地址 mov ds, ax ;存入DS寄存器 mov ax, data_seg1 ;附加段地址 mov es, ax ;存入ES寄存器 …… code_seg ends ;代码段结束 ************************** end start
教学进程
5.1.2 汇编语言语句 5. 属性操作符
● PTR操作符
格式:类型 PTR 符号名
功能:该操作符用于指定操作数的类型。
● 段操作符
格式:段寄存器名:地址表达式
功能:用来表示变量或地址表达式的段属性。
● THIS操作符
格式:THIS 类型 功能:把它后面指定的类型或距离属性赋给当前的变量、标号或定 制表达式。
LE(小于或等于)、GE(大于或等于),当关系成立时,
运算结果为1(FFH或FFFFH),否则为0。 格式:表达式1 关系运算符 表达式2
教学进程
5.1.2 汇编语言语句 7.运算的优先级别 优先级 高
运算符(操作符) 括号中的表达式 LENGTH,SIZE,WIDTH,MASK PRT,OFFSET,SEG,TYPE,THIS,段前缀 HIGH,LOW *,/,MOD,SHL,SHR
第
5章
5.2 汇编语言程序设计 5.2.1 顺序程序设计 5.2.2 分支程序设计 5.2.3 循环程序设计
汇编语言
5.1 8086汇编语言基础 5.1.1 汇编语言基本语法 5.1.2 汇编语言语句 5.1.3 伪指令语句
5.1.4 宏指令语句
5.2.4 子程序设计
5.2.5 DOS功能调用
5.1 8086汇编语言基础
NEAR AX,BX
AX,CX APOC
START
教学进程
5.1.3 伪指令语句 5. 条件汇编伪指令 格式:IF ×× 表达式 …… 程序段1 ELSE …… 程序段2 ENDIF
条件汇编有多种伪操作指令:
(1)IF 表达式 功能:表达式为1,汇编程序段1,否则跳过。 (2)IFE 表达式 功能:表达式为0,汇编程序段1,否则跳过。 (3)IFB 参数 功能:参数为空格,汇编程序段1,否则跳过。
功能:其中,DT伪操作指令用来定义10个字节,其后的每个操作数占
有10个字节,形成压缩的BCD码;DUP指令可以为若干重复数据 分配内存单元。
教学进程
5.1.3 伪指令语句 3. 段定义伪指令 格式: 段名 SEGMENT …… 段名 ENDS
段定义时,必须将段和段寄存器自之间建立对应关系,可以用 ASSUME伪操作来实现,其格式为: ASSUME 段寄存器名:段名1[,段名2……]
;实参[SI]替换形参SR1 ;实参[DI]替换形参SR2 ;符合地址ADDR被??00替换
;实参CL替换形参DES
教学进程
5.1.4 宏指令语句 2.局域符号定义 格式:LOCAL 符号地址1,符号地址2,……
●这些符号地址在宏展开时,由汇编程序重新命名。
3. 宏指令举例
●例:宏定义可以无参数
● 例:宏定义参数可以时操作码
(3)操作数字段是操作符的操作对象。
(4)注释字段是以“;”开头的说明部分,可以用英文或者中文书 写。
教学进程
●1.汇编语言格式 标识符
5.1.2 汇编语言语句
标号:标号在代码段中定义,后面跟着冒号标号。 变量:变量在数据段或附加数据段中定义,后面不跟冒号。
标号和变量都有三个属性 段属性:标号所代表的段的值,可用SEG算符得到。 偏移量属性:标号所代表的偏移量的值,可用OFFSET算符得到。
宏定义: SAVEREG
宏定义: REGINC
MACRO PUSH PUSH PUSH PUSH ENDM SAVEREG
AX BX CX DX
MOCRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM
REGINC IVAR1,INC,AX
宏调用: 宏展开: + MOV + INC
宏调用:
类型属性:标号所代表的内存单元所存放的数据或指令代码的类型。
名字项的组成规则 组成标号的字符:A〜Z,a〜z,0〜9,?,@,$,和_(下划线);
标号的最大长度为3l(字符个数);
标号的第一个字符不能是0〜9的数字; 机器指令语句中标号必须以冒号结束,伪指令语句中的标号不允
许有冒号。
ARRAY
MOV ADD
DW 1, 2, 3
AX,05H AX,TYPE ARRAY ;AX=5+2=7
教学进程
● 4.数值回送操作符
● 取地址的偏移量
5.1.2 汇编语言语句
格式:OFFSET变量或标号 功能:返回变量或标号所在段的段内偏移地 例: MOV AX OFFSET LABEL; AX=0001H
AX,IVAR1 AX
教学进程
5.1.4 宏指令语句 伪操作PURGE
● 伪操作PURGE可以取消宏定义
宏定义:
ADD2 MACRO OPTR1,OPTR2,RESULT MOV AX,OPTR1
教学进程
5.1.3 伪指令语句
2.数据定义伪指令
数据定义伪指令有五种:DB、DW、DD、DQ、DT和DUP。 格式: 变量名 DB 表达式;定义字节 变量名 DW 表达式;定义字 变量名 DD 表达式;定义双字 变量名 DQ 表达式;定义8个字节 变量名 DT 表达式;定义10个字节 复制次数 DUP 表达式
教学进程
5.1.2 汇编语言语句 ●1.汇编语言格式 汇编语言源程序中的语句可以由四项组成,格式如下: [名字] 操作符 [操作数] [;注释]
(1)名字项是程序设计人员自己定义的符号, 用于代表内存单元的 地址,表示本条语句的符号地址。一般来说,名字可以是标号和 变量,统称为标识符。 (2)操作符可以是指令、伪指令或宏指令的助记符。
教学进程
5.1.2 汇编语言语句 ● 2.算术操作符 算术操作符有 + 、 - 、 * 、 / 和 MOD 以及 SHL (左移)、 SHR (右
移)。其中MOD运算是取模运算,即除法之后所得的余数。
例:
MOV ADD MOV
AL,10MOD3 AL,11HSHR1
;AL=1 ;AL=8
AX,(9-1) * 2 ;AX=0FH
● 取变量字节数
格式:SIZE BIANL1 功能:返回变量的字节数,等于LENGTH与TYPE的乘积。 例: BUFFER1 DB 10 DUP(10H) BUFFER2 DW 20 DUP(20H) MOV MOV AX,LENGTH BUFFER1 BX,SIZE BUFFER2 ;AX=10 ;BX=20
教学进程
5. 属性操作符
● SHORT操作符
5.1.2 汇编语言语句
格式:SHORT 标号 功能:用来修饰转移指令的目标地址的属性,偏移量为8位。
● 分类运算符
格式:HIGH 表达式
LOW 表达式
功能:从表达式种分离出高字节、低字节。 6. 关系运算符 运算符: EQ(相等)、NE(不等于)、LT(小于)、GT(大于)、
系统软件程序。
● 汇编语言进行程序设计缺点 1)效率低(与人们描述计算过程的需要差距大); 2 )机器硬件的具体结构联系过于紧密 ——在一种结构的机器上开发 的程序极难移植到另一种不同结构的机器上去。
教学进程
5.1.1 汇编语言基本语法 在8086汇编中使用的语句可以分成3种类型 指令语句: 这类指令能够产生目标代码,是CPU可以执行的能够完成
● 汇编语言的处理过程:
(1)编写汇编语言源程序,生成扩展名为ASM的汇编源源文件。
(2)对汇编源程序进行编译。
(3)对目标文件进行连接 。
教学进程
5.1 8086汇编语言基础
● 汇编语言进行程序设计的优点 1)充分利用机器的硬件功能和结构特点,加快程序的执行速度,
减少目标程序所占用的存储空间;
2)用来编写实时控制程序、实时通信程序,有时也用来编制某些
MOV
JIA MOV
AL,
AL, ADR,
VAL
10 AL
教学进程
5.1.3 伪指令语句(续) 1. 符号定义伪指令
● 等号伪指令
格式:符号名=表达式
功能:等号伪指令用来定义一个符号,用该符号代表表达式、 常数等。
● 解除符号定义伪指令
格式:PURGE 符号1,符号2,…… 功能:用来解除之前引用符号的定义。
IF MOV SAL ELSE MOV CL,4 SAR AL,CL END IF
教学进程
5.1.4 宏指令语句 1.宏指令的定义 格式:宏指令名 MACRO [形式参数1,形式参数2,……] …… ENDM
其中,MACRO和ENDM是一对伪操作。
教学进程
5.1.4 宏指令语句 宏调用举例 …… MIN CL,[SI],[DI] …… 汇编后展开: …… + PUSH AX + MOV AL,[SI] + CMP AL,[DI] + JNB ??00 + MOV AL,[DI] +??00: MOV CL,AL + POP AX …… +号代表宏展开的语句。 ;把由SI和DI间接寻址的两个内存单元中 ;不带符号数中小的送入CL
教学进程
5. 条件汇编伪指令 条件汇编有多种伪操作指令(续) (4)IFNB 参数 功能:参数不为空格,汇编程序段1,否则跳过。 (5)IFIDN 参数1,参数2
5.1.3 伪指令语句
功能:字符串参数1与字符串参数2相同,汇编程序1,否则跳过。
例: AA EQU 10H …… AA-10H CL,4 AL,CL
教学进程
5.1.2 汇编语言语句 ● 3. 逻辑操作符 逻辑操作符包括 AND 、 OR 、 XOR 、 NOT ,逻辑操作符是按位操作的,
只能用于数字表达式。
例: AND DX,PORT_VAL AND ;DX=DX AND
PORT_VAL AND MOV AL,00H AND 0FH ;AL=00H
+,பைடு நூலகம்Q,NE,LT,TE,GT,GE NOT
低
OR,XOR
SHORT
教学进程
5.1.3 伪指令语句
1. 符号定义伪指令
● EQU 等价伪指令
格式:符号名 EQU 表达式 功能:用来定义一个符号,用该符号代表机器指令助记符、伪 指令助记符、寄存器名字、各种运算符号、常数等。 例: VAL JIA ADR EQU EQU EQU 100 ADD [SI+BX+1000H]
5.1.3 伪指令语句 4. 过程定义伪指令 格式: 过程名 PROC …… 过程体
APRC START:
例: CODE SEGMENT
APRC
RET
过程名 ENDP
功能:完成过程定义,在过程体
中实现过程的操作功能。
CODE
PROC ADD …… RET ENDP MOV CALL …… ENDS END
MOV
CX,08FH OR F8H
;CX=0FFHS
教学进程
5.1.2 汇编语言语句 ● 4. 数值回送操作符
● 求变量或标号类型值
格式:TYPE 变量或标号 功能:若为变量,则程序将回送该变量以字节数表示的类型: DB为1,DW为2,DD为4,DQ为8,DT为10。 若为标号,则程序将回送代表该标号类型的数值: NEAR 为-1,FRA为-2。 例:
●取段基地址
格式:SEG 变量或标号 功能:返回变量或标号所在段的段地址 例: MOV DX SEG LABEL; AX=1000H
教学进程
● 4.数值回送操作符
● 取变量单元数
5.1.2 汇编语言语句
格式:LENGTH 变量 功能:如果变量是用 DUP 说明,则返回 DUP 定义变量的重 复次数,否则,返回值为1。
特定功能的语句,主要由机器指令组成。在汇编时一条
指令语句被翻译成对应的机器码,对应着特定的操作。 伪指令语句: 伪指令语句是为汇编程序和连接程序提供一些必要控制的 管理性语句,它不产生目标代码,仅仅在汇编过程中告诉 汇编程序应如何汇编,并完成相应的伪操作。 宏指令语句: 宏指令语句是由编程者按照一定的规则来定义的一种较 “宏大”的指令,可包括多条指令或伪指令。
教学进程
5.1.3 伪指令语句 段定义伪指令举例 例: * * * * * * * * * * * * * * * * * * * * * * * data_seg1 segment ;定义数据段 …… data_seg1 ends *********************** code_seg segment ;定义代码段 assume ds:data_seg1, es:data_seg1 assume cs:code_seg start: ;程序执行的起始地址 mov ax, data_seg1 ;数据段地址 mov ds, ax ;存入DS寄存器 mov ax, data_seg1 ;附加段地址 mov es, ax ;存入ES寄存器 …… code_seg ends ;代码段结束 ************************** end start
教学进程
5.1.2 汇编语言语句 5. 属性操作符
● PTR操作符
格式:类型 PTR 符号名
功能:该操作符用于指定操作数的类型。
● 段操作符
格式:段寄存器名:地址表达式
功能:用来表示变量或地址表达式的段属性。
● THIS操作符
格式:THIS 类型 功能:把它后面指定的类型或距离属性赋给当前的变量、标号或定 制表达式。
LE(小于或等于)、GE(大于或等于),当关系成立时,
运算结果为1(FFH或FFFFH),否则为0。 格式:表达式1 关系运算符 表达式2
教学进程
5.1.2 汇编语言语句 7.运算的优先级别 优先级 高
运算符(操作符) 括号中的表达式 LENGTH,SIZE,WIDTH,MASK PRT,OFFSET,SEG,TYPE,THIS,段前缀 HIGH,LOW *,/,MOD,SHL,SHR
第
5章
5.2 汇编语言程序设计 5.2.1 顺序程序设计 5.2.2 分支程序设计 5.2.3 循环程序设计
汇编语言
5.1 8086汇编语言基础 5.1.1 汇编语言基本语法 5.1.2 汇编语言语句 5.1.3 伪指令语句
5.1.4 宏指令语句
5.2.4 子程序设计
5.2.5 DOS功能调用
5.1 8086汇编语言基础
NEAR AX,BX
AX,CX APOC
START
教学进程
5.1.3 伪指令语句 5. 条件汇编伪指令 格式:IF ×× 表达式 …… 程序段1 ELSE …… 程序段2 ENDIF
条件汇编有多种伪操作指令:
(1)IF 表达式 功能:表达式为1,汇编程序段1,否则跳过。 (2)IFE 表达式 功能:表达式为0,汇编程序段1,否则跳过。 (3)IFB 参数 功能:参数为空格,汇编程序段1,否则跳过。
功能:其中,DT伪操作指令用来定义10个字节,其后的每个操作数占
有10个字节,形成压缩的BCD码;DUP指令可以为若干重复数据 分配内存单元。
教学进程
5.1.3 伪指令语句 3. 段定义伪指令 格式: 段名 SEGMENT …… 段名 ENDS
段定义时,必须将段和段寄存器自之间建立对应关系,可以用 ASSUME伪操作来实现,其格式为: ASSUME 段寄存器名:段名1[,段名2……]
;实参[SI]替换形参SR1 ;实参[DI]替换形参SR2 ;符合地址ADDR被??00替换
;实参CL替换形参DES
教学进程
5.1.4 宏指令语句 2.局域符号定义 格式:LOCAL 符号地址1,符号地址2,……
●这些符号地址在宏展开时,由汇编程序重新命名。
3. 宏指令举例
●例:宏定义可以无参数
● 例:宏定义参数可以时操作码
(3)操作数字段是操作符的操作对象。
(4)注释字段是以“;”开头的说明部分,可以用英文或者中文书 写。
教学进程
●1.汇编语言格式 标识符
5.1.2 汇编语言语句
标号:标号在代码段中定义,后面跟着冒号标号。 变量:变量在数据段或附加数据段中定义,后面不跟冒号。
标号和变量都有三个属性 段属性:标号所代表的段的值,可用SEG算符得到。 偏移量属性:标号所代表的偏移量的值,可用OFFSET算符得到。
宏定义: SAVEREG
宏定义: REGINC
MACRO PUSH PUSH PUSH PUSH ENDM SAVEREG
AX BX CX DX
MOCRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM
REGINC IVAR1,INC,AX
宏调用: 宏展开: + MOV + INC
宏调用:
类型属性:标号所代表的内存单元所存放的数据或指令代码的类型。
名字项的组成规则 组成标号的字符:A〜Z,a〜z,0〜9,?,@,$,和_(下划线);
标号的最大长度为3l(字符个数);
标号的第一个字符不能是0〜9的数字; 机器指令语句中标号必须以冒号结束,伪指令语句中的标号不允
许有冒号。
ARRAY
MOV ADD
DW 1, 2, 3
AX,05H AX,TYPE ARRAY ;AX=5+2=7
教学进程
● 4.数值回送操作符
● 取地址的偏移量
5.1.2 汇编语言语句
格式:OFFSET变量或标号 功能:返回变量或标号所在段的段内偏移地 例: MOV AX OFFSET LABEL; AX=0001H
AX,IVAR1 AX
教学进程
5.1.4 宏指令语句 伪操作PURGE
● 伪操作PURGE可以取消宏定义
宏定义:
ADD2 MACRO OPTR1,OPTR2,RESULT MOV AX,OPTR1
教学进程
5.1.3 伪指令语句
2.数据定义伪指令
数据定义伪指令有五种:DB、DW、DD、DQ、DT和DUP。 格式: 变量名 DB 表达式;定义字节 变量名 DW 表达式;定义字 变量名 DD 表达式;定义双字 变量名 DQ 表达式;定义8个字节 变量名 DT 表达式;定义10个字节 复制次数 DUP 表达式
教学进程
5.1.2 汇编语言语句 ●1.汇编语言格式 汇编语言源程序中的语句可以由四项组成,格式如下: [名字] 操作符 [操作数] [;注释]
(1)名字项是程序设计人员自己定义的符号, 用于代表内存单元的 地址,表示本条语句的符号地址。一般来说,名字可以是标号和 变量,统称为标识符。 (2)操作符可以是指令、伪指令或宏指令的助记符。
教学进程
5.1.2 汇编语言语句 ● 2.算术操作符 算术操作符有 + 、 - 、 * 、 / 和 MOD 以及 SHL (左移)、 SHR (右
移)。其中MOD运算是取模运算,即除法之后所得的余数。
例:
MOV ADD MOV
AL,10MOD3 AL,11HSHR1
;AL=1 ;AL=8
AX,(9-1) * 2 ;AX=0FH
● 取变量字节数
格式:SIZE BIANL1 功能:返回变量的字节数,等于LENGTH与TYPE的乘积。 例: BUFFER1 DB 10 DUP(10H) BUFFER2 DW 20 DUP(20H) MOV MOV AX,LENGTH BUFFER1 BX,SIZE BUFFER2 ;AX=10 ;BX=20
教学进程
5. 属性操作符
● SHORT操作符
5.1.2 汇编语言语句
格式:SHORT 标号 功能:用来修饰转移指令的目标地址的属性,偏移量为8位。
● 分类运算符
格式:HIGH 表达式
LOW 表达式
功能:从表达式种分离出高字节、低字节。 6. 关系运算符 运算符: EQ(相等)、NE(不等于)、LT(小于)、GT(大于)、
系统软件程序。
● 汇编语言进行程序设计缺点 1)效率低(与人们描述计算过程的需要差距大); 2 )机器硬件的具体结构联系过于紧密 ——在一种结构的机器上开发 的程序极难移植到另一种不同结构的机器上去。
教学进程
5.1.1 汇编语言基本语法 在8086汇编中使用的语句可以分成3种类型 指令语句: 这类指令能够产生目标代码,是CPU可以执行的能够完成
● 汇编语言的处理过程:
(1)编写汇编语言源程序,生成扩展名为ASM的汇编源源文件。
(2)对汇编源程序进行编译。
(3)对目标文件进行连接 。
教学进程
5.1 8086汇编语言基础
● 汇编语言进行程序设计的优点 1)充分利用机器的硬件功能和结构特点,加快程序的执行速度,
减少目标程序所占用的存储空间;
2)用来编写实时控制程序、实时通信程序,有时也用来编制某些
MOV
JIA MOV
AL,
AL, ADR,
VAL
10 AL
教学进程
5.1.3 伪指令语句(续) 1. 符号定义伪指令
● 等号伪指令
格式:符号名=表达式
功能:等号伪指令用来定义一个符号,用该符号代表表达式、 常数等。
● 解除符号定义伪指令
格式:PURGE 符号1,符号2,…… 功能:用来解除之前引用符号的定义。
IF MOV SAL ELSE MOV CL,4 SAR AL,CL END IF
教学进程
5.1.4 宏指令语句 1.宏指令的定义 格式:宏指令名 MACRO [形式参数1,形式参数2,……] …… ENDM
其中,MACRO和ENDM是一对伪操作。
教学进程
5.1.4 宏指令语句 宏调用举例 …… MIN CL,[SI],[DI] …… 汇编后展开: …… + PUSH AX + MOV AL,[SI] + CMP AL,[DI] + JNB ??00 + MOV AL,[DI] +??00: MOV CL,AL + POP AX …… +号代表宏展开的语句。 ;把由SI和DI间接寻址的两个内存单元中 ;不带符号数中小的送入CL
教学进程
5. 条件汇编伪指令 条件汇编有多种伪操作指令(续) (4)IFNB 参数 功能:参数不为空格,汇编程序段1,否则跳过。 (5)IFIDN 参数1,参数2
5.1.3 伪指令语句
功能:字符串参数1与字符串参数2相同,汇编程序1,否则跳过。
例: AA EQU 10H …… AA-10H CL,4 AL,CL
教学进程
5.1.2 汇编语言语句 ● 3. 逻辑操作符 逻辑操作符包括 AND 、 OR 、 XOR 、 NOT ,逻辑操作符是按位操作的,
只能用于数字表达式。
例: AND DX,PORT_VAL AND ;DX=DX AND
PORT_VAL AND MOV AL,00H AND 0FH ;AL=00H
+,பைடு நூலகம்Q,NE,LT,TE,GT,GE NOT
低
OR,XOR
SHORT
教学进程
5.1.3 伪指令语句
1. 符号定义伪指令
● EQU 等价伪指令
格式:符号名 EQU 表达式 功能:用来定义一个符号,用该符号代表机器指令助记符、伪 指令助记符、寄存器名字、各种运算符号、常数等。 例: VAL JIA ADR EQU EQU EQU 100 ADD [SI+BX+1000H]