第四章汇编语言程序设计-课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⑵ 指令性语句中的操作数最多为两个操作数,也可 以没有操作数。
而指示性语句中的操作数可根据需要有多个,当操 作数有不止一个时,相互之间用逗号隔开。
汇编语言语句中的操作数
三、数据项及表达式 操作数可以是寄存器、存储器单元或数据项。
而数据项又可以是常量、标号、变量和表达式 1.常量 • 二进制常量 • 十进制常量 • 十六进制常量 • 字符串常量
INT
21H
;返回DOS
CODE
ENDS
;代码段结束
END START
; 源程序结束
二、汇编语言语句类型及格式
指令性语句的格式: [标号:] [前缀] 操作码 [操作数[,操作数]] [;注释] 例如指令性语句:
START: MOV AX,DATA ;将立即数DATA送累加器AX 指示性语句的格式:
变量也具有3种属性,即:段、偏移量和类型。
• 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数 据段或附加段中,所以变量的段值在DS或ES寄存器中。
• 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字 节数。
• 变 量 的 类 型 有 BYTE(字 节 )、 WORD(字 )、DWORD(双字 )、 QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对 象的大小。
[名字] 伪操作 [操作数[,操作数,…] [;注释] 例如指示性语句:
DATA1 DB 56H,78H,9AH ;定义字节型数据,“DB”是伪操作
指令性语句与指示性语句在格式上的区别:
⑴ 指令性语句中的“标号”表示指令的符பைடு நூலகம்地址, 其后面通常要加上“:”。
指示性语句中的“名字”通常表示变量名、段名和 过程名等,其后不加“:”。名字在多数情况下表 示的是变量名,用来表示存储器中一个数据区的 地址。
第四章汇编语言程序设计
精品jing
[例4-1] 两个字(A6B8H, 206DH)相加
的完整的汇编语言程序
DATA SEGMENT
;定义数据段
DATA1
DW
0A6B8H
;定义被加数
DATA2
DW
206DH
;定义加数
SUM
DW 2 DUP(?)
;定义和
DATA ENDS
;数据段结束
CODE
SEGMENT
MOV AX,SEG DATA
;将变量DATA的段地址送AX
MOV DS,AX
;(DS)←(AX)
⑸ 属性运算符
属性运算符PTR用来指定其后的存储器操作数的类型。
例如:MOV AX,WORD PTR[SI] 向的两个存储单元送AX
;将SI和SI+1所指
⑹ 段超越运算符
运算符“:”跟在某个段寄存器名(DS、ES、SS或CS)之 后表示段超越,用来指定一个存储器操作数的段属性。
;定义代码段
ASSEME CS:CODE,DS:DATA
;段寄存器说明
START:
MOV AX,DATA
MOV DS,AX
;初始化DS
LEA
SI,SUM
;存放结果的偏移地址送SI
MOV AX,DATA1
;取被加数
ADD AX,DATA2
;两数相加
MOV [SI],AX
;和送入SUM
MOV AH,4CH
例如:MOV AX,ES:[BX] 操作数送(AX)
;将ES段中由BX指向的字
第二节 伪指令
一、数据定义伪指令 数据定义伪指令用来定义一个变量的类型,给存储
器赋初值,或给变量分配存储空间
1.定义字节(DB) DB(Define Byte)用来定义一个变量,并初始化其内存单元。 格式:[变量名] DB 表达式 表达式可以是以下情况之一:
⑶ 关系运算符
关 系 运 算 符 包 括 EQ( 等 于 ) 、 NE( 不 等 于 ) 、 LT( 小 于)、GT(大于)、LE(小于等于)、GE(大于等于)。
关系运算符连接的必须是两个数值,或同一段中的 两个存储单元地址。关系运算符的运算结果是一 个逻辑值,当关系不成立(为假)时,结果为0; 当关系成立(为真)时,结果为0FFFFH
使用变量时需注意以下两点:
⑴ 变量的类型与指令的要求要相符。例如指令
MOV AX,VAR中,要求VAR必须定义为字类型变 量。
⑵ 在定义变量时,变量名对应的是数据区的首地址。
如果数据区中有多个数据,则对其他数据操作时, 需修改地址。例如:
BUFFER DB 56H,78H,9AH
…
MOV
AL,BUFFER+2 ;将9AH送(AL)
⑴ 一个常数表达式; ⑵ 问号(?)作为非确定的初始值; ⑶ 一个或多个字符的字符串; ⑷ 重复子句: 重复次数 DUP(表达式)…
例如:
DATA1 DB 11H,22H,33,44H,55H ;定义了5个字节常
⑷ 取值运算符
取值运算符用来分析一个存储器操作数的属性
• OFFSET 利用运算符OFFSET可以得到一个标号或变量的偏移地址。例如:
MOV SI,OFFSET DATA1 ;将变量DATA1的偏移地址送SI 该指令等同于以下指令:
LEA SI,DATA1
• SEG
利用运算符SEG可以得到一个标号或变量的段地址。例如:
• 标号的类型有NEAR和FAR两种。前一种标号称 为近标号,只能在段内被引用,地址指针为2个字 节。后一种标号称为远标号,可以在其他段被引 用,地址指针为4个字节。
3.变量
变量名由字母开头,长度不超过31个字符。变量是存储 器中某个数据区的名字,因为数据区中的内容是可以改 变的,因此变量的值也可以改变。变量在指令中可以作 为存储器操作数引用。
4.表达式
表达式是由常数、操作数、操作符和运算符组合而成
表达式中常用的运算符有以下几种:
⑴ 算术运算符
算术运算符有+(加)、-(减)、*(乘)、/(除)、MOD(取余)等 ⑵ 逻辑运算符
逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异 或)
例如:指令MOV AL,0A6H XOR 0CEH等价于MOV AL,68H
2.标号
指令的标号是由编程者确定的,它不能与 指令助记符或伪指令重名,也不允许由数 字开头,标号的字符个数不超过31个。
指令性语句中的标号代表存放一条指令的 存储单元的符号地址,其后通常加一个冒 号。
标号具有3种属性:段、偏移量和类型。
• 标号的段属性是就是标号所在段的段地址。
• 标号的偏移量就是标号所在段的起始地址到定义 该标号的地址之间的字节数(即偏移地址)。偏 移量是一个16位无符号数。
而指示性语句中的操作数可根据需要有多个,当操 作数有不止一个时,相互之间用逗号隔开。
汇编语言语句中的操作数
三、数据项及表达式 操作数可以是寄存器、存储器单元或数据项。
而数据项又可以是常量、标号、变量和表达式 1.常量 • 二进制常量 • 十进制常量 • 十六进制常量 • 字符串常量
INT
21H
;返回DOS
CODE
ENDS
;代码段结束
END START
; 源程序结束
二、汇编语言语句类型及格式
指令性语句的格式: [标号:] [前缀] 操作码 [操作数[,操作数]] [;注释] 例如指令性语句:
START: MOV AX,DATA ;将立即数DATA送累加器AX 指示性语句的格式:
变量也具有3种属性,即:段、偏移量和类型。
• 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数 据段或附加段中,所以变量的段值在DS或ES寄存器中。
• 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字 节数。
• 变 量 的 类 型 有 BYTE(字 节 )、 WORD(字 )、DWORD(双字 )、 QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对 象的大小。
[名字] 伪操作 [操作数[,操作数,…] [;注释] 例如指示性语句:
DATA1 DB 56H,78H,9AH ;定义字节型数据,“DB”是伪操作
指令性语句与指示性语句在格式上的区别:
⑴ 指令性语句中的“标号”表示指令的符பைடு நூலகம்地址, 其后面通常要加上“:”。
指示性语句中的“名字”通常表示变量名、段名和 过程名等,其后不加“:”。名字在多数情况下表 示的是变量名,用来表示存储器中一个数据区的 地址。
第四章汇编语言程序设计
精品jing
[例4-1] 两个字(A6B8H, 206DH)相加
的完整的汇编语言程序
DATA SEGMENT
;定义数据段
DATA1
DW
0A6B8H
;定义被加数
DATA2
DW
206DH
;定义加数
SUM
DW 2 DUP(?)
;定义和
DATA ENDS
;数据段结束
CODE
SEGMENT
MOV AX,SEG DATA
;将变量DATA的段地址送AX
MOV DS,AX
;(DS)←(AX)
⑸ 属性运算符
属性运算符PTR用来指定其后的存储器操作数的类型。
例如:MOV AX,WORD PTR[SI] 向的两个存储单元送AX
;将SI和SI+1所指
⑹ 段超越运算符
运算符“:”跟在某个段寄存器名(DS、ES、SS或CS)之 后表示段超越,用来指定一个存储器操作数的段属性。
;定义代码段
ASSEME CS:CODE,DS:DATA
;段寄存器说明
START:
MOV AX,DATA
MOV DS,AX
;初始化DS
LEA
SI,SUM
;存放结果的偏移地址送SI
MOV AX,DATA1
;取被加数
ADD AX,DATA2
;两数相加
MOV [SI],AX
;和送入SUM
MOV AH,4CH
例如:MOV AX,ES:[BX] 操作数送(AX)
;将ES段中由BX指向的字
第二节 伪指令
一、数据定义伪指令 数据定义伪指令用来定义一个变量的类型,给存储
器赋初值,或给变量分配存储空间
1.定义字节(DB) DB(Define Byte)用来定义一个变量,并初始化其内存单元。 格式:[变量名] DB 表达式 表达式可以是以下情况之一:
⑶ 关系运算符
关 系 运 算 符 包 括 EQ( 等 于 ) 、 NE( 不 等 于 ) 、 LT( 小 于)、GT(大于)、LE(小于等于)、GE(大于等于)。
关系运算符连接的必须是两个数值,或同一段中的 两个存储单元地址。关系运算符的运算结果是一 个逻辑值,当关系不成立(为假)时,结果为0; 当关系成立(为真)时,结果为0FFFFH
使用变量时需注意以下两点:
⑴ 变量的类型与指令的要求要相符。例如指令
MOV AX,VAR中,要求VAR必须定义为字类型变 量。
⑵ 在定义变量时,变量名对应的是数据区的首地址。
如果数据区中有多个数据,则对其他数据操作时, 需修改地址。例如:
BUFFER DB 56H,78H,9AH
…
MOV
AL,BUFFER+2 ;将9AH送(AL)
⑴ 一个常数表达式; ⑵ 问号(?)作为非确定的初始值; ⑶ 一个或多个字符的字符串; ⑷ 重复子句: 重复次数 DUP(表达式)…
例如:
DATA1 DB 11H,22H,33,44H,55H ;定义了5个字节常
⑷ 取值运算符
取值运算符用来分析一个存储器操作数的属性
• OFFSET 利用运算符OFFSET可以得到一个标号或变量的偏移地址。例如:
MOV SI,OFFSET DATA1 ;将变量DATA1的偏移地址送SI 该指令等同于以下指令:
LEA SI,DATA1
• SEG
利用运算符SEG可以得到一个标号或变量的段地址。例如:
• 标号的类型有NEAR和FAR两种。前一种标号称 为近标号,只能在段内被引用,地址指针为2个字 节。后一种标号称为远标号,可以在其他段被引 用,地址指针为4个字节。
3.变量
变量名由字母开头,长度不超过31个字符。变量是存储 器中某个数据区的名字,因为数据区中的内容是可以改 变的,因此变量的值也可以改变。变量在指令中可以作 为存储器操作数引用。
4.表达式
表达式是由常数、操作数、操作符和运算符组合而成
表达式中常用的运算符有以下几种:
⑴ 算术运算符
算术运算符有+(加)、-(减)、*(乘)、/(除)、MOD(取余)等 ⑵ 逻辑运算符
逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异 或)
例如:指令MOV AL,0A6H XOR 0CEH等价于MOV AL,68H
2.标号
指令的标号是由编程者确定的,它不能与 指令助记符或伪指令重名,也不允许由数 字开头,标号的字符个数不超过31个。
指令性语句中的标号代表存放一条指令的 存储单元的符号地址,其后通常加一个冒 号。
标号具有3种属性:段、偏移量和类型。
• 标号的段属性是就是标号所在段的段地址。
• 标号的偏移量就是标号所在段的起始地址到定义 该标号的地址之间的字节数(即偏移地址)。偏 移量是一个16位无符号数。