第四章汇编语言程序设计-课件
合集下载
[所有分类]第4章 汇编语言程序设计ppt课件
JMP_128:MOV A,R3
RL A MOV DPTR,#JMPTAB
JMP @A+DPTR JMPTAB:AJMP ROUT00
AJMP ROUT01
┇
┇
AJMP ROUT7F
128个子程序首址
•说明:此程序要求128个转移目的地址(ROUT00 ~ROUT7FH)必须驻 留在与绝对转移指令AJMP相同的一个2KB存储区内。
第4章 汇编语言程序设计及知识
§4.1 编程的步骤、方法和技巧 §4.2 汇编语言源程序的编辑和汇编
2021/5/19
§4.1 编程的步骤、方法和技巧
§4.1.1 编程的步骤 §4.1.2 编程的方法和技巧 §4.1.3 汇编语言程序的基本结构
2021/5/19
编程的步骤
一、分析问题 二、确定算法 三、画程序流程图 四、编写程序
LOOP : CLR C SUBB A,@R1 JNC NEXT MOV A,@R1 SJMP NEXT1
NEXT: ADD A,@R1 NEXT1: INC R1
DJNZ R2,LOOP MOV MAX,A
2021/5/19
循环结构
例:在内部RAM的20H~ 2FH连续16个单元中存放单 字节无符号数。求16个无 符号数之和,并将其和存放 在31H、30H中。用R0作加 数指针,R7作循环次数计 数器。
一、顺序结构
顺序程序是最简单的程序结构,即顺序 结构。
程序按顺序一条一条地执行指令。
2021/5/19
顺序结构举例
例1 双字节乘法子程序。 (R4) (R3)×(R2)=[(R4) ·28+ (R3) ] ·(R2) =(R4) ·(R2) ·28+ (R3) ·(R2)
第4章汇编语言程序设计知识PPT课件
┇
(1500H)=72H, (1501H)=34H, (1502H)=00H,
(1503H)=8AH,(1504H)=00H, (1505H)=10H。
(1506H)=00H,(1507H)=48H (H的ASCII值)
第24页/共61页
§4.2 伪指令
7、DS 定义存储空间命 令
格式:DS 表达式 功能:在汇编时,从指定地址开始保留DS之后表达式的值所
第15页/共61页
§4.2 伪指令
1、ORG 汇编起始地址命令
格式:ORG 16位地址
功能:规定该伪指令后面程序的汇编地址,即汇编后生成目
标程序存放的起始地址。
例如:
ORG 2000H
START:MOV A,#64H
┇
规定了START的地址是2000H,又规定了汇编后的第一条指令 码从2000H开始存放。
§4.2 伪指令
例如:
ORG 2000H DB 0A3H
LIST:DB 26H,03H STR: DB ‘ABC’
┇
A3H 26H 03H 41H 42H 43H
2000H 2001H 2002H 2003H 2004H 2005H
经汇编后:(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,
第31页/共61页
§4.4 汇编语言程序的基本结构
1、顺序程序 2、分支程序 3、循环程序
第32页/共61页
§4.4 汇编语言程序的基本结构
1、顺序程序
顺序程序是最简单的程序结构,也称直线程序。 程序按顺序一条一条地执行指令。这类程序是所有复杂程序的基础。 要写出高质量的程序还是需要掌握一定的技巧,需要熟悉指令系统,正确地选择 指令,最大限度地优化程序。
第4章-汇编语言程序设计PPT课件
目录: • 4.1 C54x的软件开发过程 • 4.2 公共目标文件格式COFF • 4.3 汇编器的伪指令 • 4.4 C54x汇编语言的有关知识 • 4.5 汇编语言程序设计
-
2
第4章 汇编语言程序设计
• 4.1 C54x的软件开发过程
提供2种编程语言:汇编语言 C/C++语言
对于完成一般功能的代码,这两种语言都可使用,但 对于一些运算量很大的关键代码,最好采用汇编语言来完 成,以提高程序的运算效率。
➢ 这些软件开发工具都被集成在CCS(Code Composer Studio)开发环境中。将在第6章详细 介绍CCS的组成及其使用方法
-
5
第4章 汇编语言程序设计
宏源文件 存档器 宏库 存档器 目标 文件库
汇编 源文件 汇编器 COFF 目标文件 链接器
HEX代码 转换工具
可执行的 COFF文件
.bss x1,19 y1 .usect “var2”,40
;为.bss段保留19个字单元空间。 ;为var2段保留40个单元空间。
链接器能够读/写所有类型的COFF文件,默认时链 接器生成的是COFF2文件,采用-vn链接选项可以选 择不同类型的COFF文件。
-
8
第4章 汇编语言程序设计
4.2.1分段结构
所谓“段”就是在存储器映像中占据连续空间的一段独立 的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: ➢ .text 段:通常内含可执行代码; ➢ .data段:通常内含已初始化数据; ➢ .bss段:是为没有初始化的数据保留空间的。
采用这种文件格式的优点是: 将指令和数据按照段的概念进行组织和存储,这使得
-
2
第4章 汇编语言程序设计
• 4.1 C54x的软件开发过程
提供2种编程语言:汇编语言 C/C++语言
对于完成一般功能的代码,这两种语言都可使用,但 对于一些运算量很大的关键代码,最好采用汇编语言来完 成,以提高程序的运算效率。
➢ 这些软件开发工具都被集成在CCS(Code Composer Studio)开发环境中。将在第6章详细 介绍CCS的组成及其使用方法
-
5
第4章 汇编语言程序设计
宏源文件 存档器 宏库 存档器 目标 文件库
汇编 源文件 汇编器 COFF 目标文件 链接器
HEX代码 转换工具
可执行的 COFF文件
.bss x1,19 y1 .usect “var2”,40
;为.bss段保留19个字单元空间。 ;为var2段保留40个单元空间。
链接器能够读/写所有类型的COFF文件,默认时链 接器生成的是COFF2文件,采用-vn链接选项可以选 择不同类型的COFF文件。
-
8
第4章 汇编语言程序设计
4.2.1分段结构
所谓“段”就是在存储器映像中占据连续空间的一段独立 的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: ➢ .text 段:通常内含可执行代码; ➢ .data段:通常内含已初始化数据; ➢ .bss段:是为没有初始化的数据保留空间的。
采用这种文件格式的优点是: 将指令和数据按照段的概念进行组织和存储,这使得
4第四章课件汇编语言程序设计
10 2019/9/15
三、操作数
操作数用于给指令的操作提供数据或地址。在一 条汇编语句中操作数可能是空缺的,也可能包括一 项,还可能包括两项或三项。各操作数间以逗号分 隔。操作数字段的内容可能包括以下几种情况:
(1)工作寄存器名; (2)特殊功能寄存器名; (3)标号名; (4)常数; (5)符号“$”,表示程序计数器PC的当前值; (6)表达式。
2 2019/9/15
二、进行算法的优化
算法是解决具体问题的方法。应用系统经过分 析、研究和明确规定后,对应实现的功能和技术指 标可以利用严密的数学方法或数学模型来描述,从 而把实际问题转化成由计算机进行处理的问题。
同一个问题的算法可以有多种,结果也可能不 尽相同,所以,应对各种算法进行分析比较,并进 行合理的优化。比如,用迭代法解微分方程,需要 考虑收敛速度的快慢(即在一定的时间里能否达到 精度要求)。而有的问题则受内存容量的限制而对 时间要求并不苛刻。对于后一种情况,速度不快但 节省内存的算法则应是首选。
27 2019/9/15
方法二:
CLR A
;1字节,1个机器周期
XCH A,2BH ;2字节,1个机器周期
XCH A,2CH ;2字节,1个机器周期
XCH A,2DH ;2字节,1个机器周期
XCH A,2EH ;2字节,1个机器周期
以上两种方法均可以实现所要求的传送任务。
方法一使用14个字节的指令代码,执行时间为9个机 器周期;方法二仅用了9个字节的代码,执行时间也 减少到了5个机器周期。实际应用中应尽量采用指令
4 2019/9/15
•清晰正确的流程图是编制正确无误的应用程 序的基础和条件。所以,绘制一个好的流程 图,是程序设计的一项重要内容。
三、操作数
操作数用于给指令的操作提供数据或地址。在一 条汇编语句中操作数可能是空缺的,也可能包括一 项,还可能包括两项或三项。各操作数间以逗号分 隔。操作数字段的内容可能包括以下几种情况:
(1)工作寄存器名; (2)特殊功能寄存器名; (3)标号名; (4)常数; (5)符号“$”,表示程序计数器PC的当前值; (6)表达式。
2 2019/9/15
二、进行算法的优化
算法是解决具体问题的方法。应用系统经过分 析、研究和明确规定后,对应实现的功能和技术指 标可以利用严密的数学方法或数学模型来描述,从 而把实际问题转化成由计算机进行处理的问题。
同一个问题的算法可以有多种,结果也可能不 尽相同,所以,应对各种算法进行分析比较,并进 行合理的优化。比如,用迭代法解微分方程,需要 考虑收敛速度的快慢(即在一定的时间里能否达到 精度要求)。而有的问题则受内存容量的限制而对 时间要求并不苛刻。对于后一种情况,速度不快但 节省内存的算法则应是首选。
27 2019/9/15
方法二:
CLR A
;1字节,1个机器周期
XCH A,2BH ;2字节,1个机器周期
XCH A,2CH ;2字节,1个机器周期
XCH A,2DH ;2字节,1个机器周期
XCH A,2EH ;2字节,1个机器周期
以上两种方法均可以实现所要求的传送任务。
方法一使用14个字节的指令代码,执行时间为9个机 器周期;方法二仅用了9个字节的代码,执行时间也 减少到了5个机器周期。实际应用中应尽量采用指令
4 2019/9/15
•清晰正确的流程图是编制正确无误的应用程 序的基础和条件。所以,绘制一个好的流程 图,是程序设计的一项重要内容。
第4章汇编语言程序设计ppt课件
DATA1
11
22
33 44
DATA2
11
00
22
00
44
33
DATA3
22
0
0
0
22
0
0
0
XX
66
55 44 33
28
数据定义伪指令的几点 说明
伪指令的性质决定所定义变量的类型;
定义字符串必须用DB伪指令
例:
DATA1 DB ‘ABCD’,66H
41H
‘A’
42H
‘B’
43H
‘C’
44H
‘D’
AH
DISN:T D2X1H
功能号OAH 字符串在内存中的存放地址
58
2. 定义字符缓冲区
用户自定义缓冲区格式:
N1 N2
存放字符个数:≤255
存放键入的字符 整个缓冲区
实际键入字符数 最大可键入字符数
0DH
59
输入字符串程序段
DAT1 DB 20,?,20 DUP(?)
┇
LEA DX,DAT1 MOV AH,0AH INT 21H
定义的变量为4字型(8字节)
定义的变量为10字节型
26
数据定义伪指令例
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
以上变量在内存中的 存放形式
27
数据定义伪指令例_变量在内存中的
分布
DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?) DATA2 DW 1234H
DSEG ENDS ESEG SEGMENT
第四章1-2讲 汇编语言程序设计ppt课件
精选ppt课件2021
25
天津工业大学
(4)带DUP的表达式
• 在表达式中使用重复数据操作符DUP,可以为连 续的存储单元提供重复数据,其格式为:
• N DUP(表达式)
• 其中N为重复因子,只能取正整数,表示定义了N 个重复数据存储单元,其类型由它前面的数据定 义伪指令确定,而每个数据存储单元中的初值由 DUP后面圆括号中的表达式给定。
随机数
DB 3 DUP(22H,11H,?)
精选ppt课件2021
27
天津工业大学
09FF:0000 22 11 ? 22 11 ? 22 11
09FF:0008 ?
0F99:000B
精选ppt课件2021
28
天津工业大学
用?预留存储空间
• MEM1 DB 34H,’A’,?,?,?
•
DW 20 DUP(?)
• LENGTH 变量 * TYPE 变量
精选ppt课件2021
40
天津工业大学
– LENGTH和SIZE运算符的具体运算规则是:如果变量是用重复操 作符DUP定义的,那么运算符LENGTH的运算结果是外层DUP的 给定值 (即外层重复次数),如果没有用DUP定义的变量,运算 结果总是1。
而运算符SIZE是LENGTH和TYPE两个运算结果的乘积。
天津工业大学
第4章 汇编语言程序设计
4.1 汇编语言源程序 4.2 伪指令 4.3 DOS系统功能调用 4.4 汇编语言程序设计基础 4.5 综合举例
精选ppt课件2021
1
天津工业大学
4.1 汇编语言源程序
了解:
• 计算机的三种语言 • 源程序的结构 • 汇编语言语句格式
第4章汇编程序设计PPT课件
第7页/共70页
初值表
• 初值表是用逗号分隔的参数 • 主要由数值常数、表达式或?、DUP组成
?——表示初值不确定,即未赋初值; DUP——表示重复初值 DUP的格式为: 重复次数 DUP(重复参数)
第8页/共70页
• 例如 BIGGEST DD 12345678H 在汇编时就会初始化,如图所示。它定义了一个双字变量,且给了初始值。
SEGMENT和ENDS语句把汇编语言源程序分 成段,这些段就相应于存储器段,在这些存储 器段中,存放相应段的目标码。
汇编程序必须知道程序的段结构,并知道 在各种指令执行时将访问哪一个段由段寄存器 所 指 向 。 这 个 信 息 是第1由7页A/共S70S页U M E 语 句 提 供 的 。
通常在汇编语言的源程序中,至少要定义 码段(指令段)、堆栈段和数据段,有时还要定 义附加段。每一个段必须有一个名称,如 MY_DATA、MY_CODE等。一个段由命令SEGMENT 开始,由命令ENDS结束,它们必须成对出现, 而且它们的语句中必须有名称,名称必须相同。 最后用语句END来结束整个源程序。
[分析]因为需要重复进行数据大小的比较,所 以可设计为循环程序结构形式,设计要点是: ①找出循环的规律;②确定控制循环的方法
第30页/共70页
• 参考程序:
DATA SEGMENT BUF DB 26, 78, 196, 45, 16, 9 CNT EQU $-BUF
DATA ENDS CODE SEGMENT
NAME1
SEGMENT
语句
┇
语句
NAME1
ENDS
NAME2
SEGMENT
语句
┇
语句
NAME2
ENDS
初值表
• 初值表是用逗号分隔的参数 • 主要由数值常数、表达式或?、DUP组成
?——表示初值不确定,即未赋初值; DUP——表示重复初值 DUP的格式为: 重复次数 DUP(重复参数)
第8页/共70页
• 例如 BIGGEST DD 12345678H 在汇编时就会初始化,如图所示。它定义了一个双字变量,且给了初始值。
SEGMENT和ENDS语句把汇编语言源程序分 成段,这些段就相应于存储器段,在这些存储 器段中,存放相应段的目标码。
汇编程序必须知道程序的段结构,并知道 在各种指令执行时将访问哪一个段由段寄存器 所 指 向 。 这 个 信 息 是第1由7页A/共S70S页U M E 语 句 提 供 的 。
通常在汇编语言的源程序中,至少要定义 码段(指令段)、堆栈段和数据段,有时还要定 义附加段。每一个段必须有一个名称,如 MY_DATA、MY_CODE等。一个段由命令SEGMENT 开始,由命令ENDS结束,它们必须成对出现, 而且它们的语句中必须有名称,名称必须相同。 最后用语句END来结束整个源程序。
[分析]因为需要重复进行数据大小的比较,所 以可设计为循环程序结构形式,设计要点是: ①找出循环的规律;②确定控制循环的方法
第30页/共70页
• 参考程序:
DATA SEGMENT BUF DB 26, 78, 196, 45, 16, 9 CNT EQU $-BUF
DATA ENDS CODE SEGMENT
NAME1
SEGMENT
语句
┇
语句
NAME1
ENDS
NAME2
SEGMENT
语句
┇
语句
NAME2
ENDS
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量也具有3种属性,即:段、偏移量和类型。
• 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数 据段或附加段中,所以变量的段值在DS或ES寄存器中。
• 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字 节数。
• 变 量 的 类 型 有 BYTE(字 节 )、 WORD(字 )、DWORD(双字 )、 QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对 象的大小。
⑶ 关系运算符
关 系 运 算 符 包 括 EQ( 等 于 ) 、 NE( 不 等 于 ) 、 LT( 小 于)、GT(大于)、LE(小于等于)、GE(大于等于)。
关系运算符连接的必须是两个数值,或同一段中的 两个存储单元地址。关系运算符的运算结果是一 个逻辑值,当关系不成立(为假)时,结果为0; 当关系成立(为真)时,结果为0FFFFH
INT
21H
;返回DOS
CODE
ENDS
;代码段结束
END START
; 源程序结束
二、汇编语言语句类型及格式
指令性语句的格式: [标号:] [前缀] 操作码 [操作数[,操作数]] [;注释] 例如指令性语句:
START: MOV AX,DATA ;将立即数DATA送累加器AX 指示性语句的格式:
• 标号的类型有NEAR和FAR两种。前一种标号称 为近标号,只能在段内被引用,地址指针为2个字 节。后一种标号称为远标号,可以在其他段被引 用,地址指针为4个字节。
3.变量
变量名由字母开头,长度不超过31个字符。变量是存储 器中某个数据区的名字,因为数据区中的内容是可以改 变的,因此变量的值也可以改变。变量在指令中可以作 为存储器操作数引用。
2.标号
指令的标号是由编程者确定的,它不能与 指令助记符或伪指令重名,也不允许由数 字开头,标号的字符个数不超过31个。
指令性语句中的标号代表存放一条指令的 存储单元的符号地址,其后通常加一个冒 号。
标号具有3种属性:段、偏移量和类型。
• 标号的段属性是就是标号所在段的段地址。
• 标号的偏移量就是标号所在段的起始地址到定义 该标号的地址之间的字节数(即偏移地址)。偏 移量是一个16位无符号数。
;定义代码段
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 表达式 表达式可以是以下情况之一:
使用变量时需注意以下两点:
⑴ 变量的类型与指令的要求要相符。例如指令
MOV AX,VAR中,要求VAR必须定义为字类型变 量。
⑵ 在定义变量时,变量名对应的是数据区的首地址。
如果数据区中有多个数据,则对其他数据操作时, 需修改地址。例如:
BUFFER DB 56H,78H,9AH
…
MOV
AL,BUFFER+2 ;将9AH送(AL)
⑵ 指令性语句中的操作数最多为两个操作数,也可 以没有操作数。
而指示性语句中的操作数可根据需要有多个,当操 作数有不止一个时,相互之间用逗号隔开。
汇编语言语句中的操作数
三、数据项及表达式 操作数可以是寄存器、存储器单元或数据项。
而数据项又可以是常量、标号、变量和表达式 1.常量 • 二进制常量 • 十进制常量 • 十六进制常量 • 字符串常量
[名字] 伪操作 [操作数[,操作数,…] [;注释] 例如指示性语句:
DATA1 DB 56H,78H,9AH ;定义字节型数据,“DB”是伪操作
指令性语句与指示性语句在格式上的区别:
⑴ 指令性语句中的“标号”表示指令的符号地址, 其后面通常要加上“:”。
指示性语句中的“名字”通常表示变量名、段名和 过程名等,其后不加“:”。名字在多数情况下表 示的是变量名,用来表示存储器中一个数据区的 地址。
⑴ 一个常数表达式; ⑵ 问号(?)作为非确定的初始值; ⑶ 一个或多个字符的字符串; ⑷ 重复子句: 重复次数 DUP(表达式)…
例如:
DATA1 DB 11H,22H,33,44H,55H ;定义了5个字节常
4.表达式
表达式是由常数、操作数、操作符和运算符组合而成
表达式中常用的运算符有以下几种:
⑴ 算术运算符
算术运算符有+(加)、-(减)、*(乘)、/(除)、MOD(取余)等 ⑵ 逻辑运算符
逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异 或)
例如:指令MOV AL,0A6H XOR 0CEH等价于MOV AL,68H
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)之 后表示段超越,用来指定一个存储器操作数的段属性。
第四章汇编语言程序设计
精品jing
[例4-1] 两个字(A6B8H, 206DH)相加
的完整的汇编语言程序
DATA SEGMENT
;定义数据段
DATA1
DW
0A6B8H
;定义被加数
DATA2
DW
206DH
;定义加数
SUM
DW 2 DUP(?)
;定义和
DATA ENDS
;数据段结束
CODE
SEGMENT
⑷ 取值运算符
取值运算符用来分析一个存储器操作数的属性
• OFFSE址。例如:
MOV SI,OFFSET DATA1 ;将变量DATA1的偏移地址送SI 该指令等同于以下指令:
LEA SI,DATA1
• SEG
利用运算符SEG可以得到一个标号或变量的段地址。例如:
• 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数 据段或附加段中,所以变量的段值在DS或ES寄存器中。
• 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字 节数。
• 变 量 的 类 型 有 BYTE(字 节 )、 WORD(字 )、DWORD(双字 )、 QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对 象的大小。
⑶ 关系运算符
关 系 运 算 符 包 括 EQ( 等 于 ) 、 NE( 不 等 于 ) 、 LT( 小 于)、GT(大于)、LE(小于等于)、GE(大于等于)。
关系运算符连接的必须是两个数值,或同一段中的 两个存储单元地址。关系运算符的运算结果是一 个逻辑值,当关系不成立(为假)时,结果为0; 当关系成立(为真)时,结果为0FFFFH
INT
21H
;返回DOS
CODE
ENDS
;代码段结束
END START
; 源程序结束
二、汇编语言语句类型及格式
指令性语句的格式: [标号:] [前缀] 操作码 [操作数[,操作数]] [;注释] 例如指令性语句:
START: MOV AX,DATA ;将立即数DATA送累加器AX 指示性语句的格式:
• 标号的类型有NEAR和FAR两种。前一种标号称 为近标号,只能在段内被引用,地址指针为2个字 节。后一种标号称为远标号,可以在其他段被引 用,地址指针为4个字节。
3.变量
变量名由字母开头,长度不超过31个字符。变量是存储 器中某个数据区的名字,因为数据区中的内容是可以改 变的,因此变量的值也可以改变。变量在指令中可以作 为存储器操作数引用。
2.标号
指令的标号是由编程者确定的,它不能与 指令助记符或伪指令重名,也不允许由数 字开头,标号的字符个数不超过31个。
指令性语句中的标号代表存放一条指令的 存储单元的符号地址,其后通常加一个冒 号。
标号具有3种属性:段、偏移量和类型。
• 标号的段属性是就是标号所在段的段地址。
• 标号的偏移量就是标号所在段的起始地址到定义 该标号的地址之间的字节数(即偏移地址)。偏 移量是一个16位无符号数。
;定义代码段
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 表达式 表达式可以是以下情况之一:
使用变量时需注意以下两点:
⑴ 变量的类型与指令的要求要相符。例如指令
MOV AX,VAR中,要求VAR必须定义为字类型变 量。
⑵ 在定义变量时,变量名对应的是数据区的首地址。
如果数据区中有多个数据,则对其他数据操作时, 需修改地址。例如:
BUFFER DB 56H,78H,9AH
…
MOV
AL,BUFFER+2 ;将9AH送(AL)
⑵ 指令性语句中的操作数最多为两个操作数,也可 以没有操作数。
而指示性语句中的操作数可根据需要有多个,当操 作数有不止一个时,相互之间用逗号隔开。
汇编语言语句中的操作数
三、数据项及表达式 操作数可以是寄存器、存储器单元或数据项。
而数据项又可以是常量、标号、变量和表达式 1.常量 • 二进制常量 • 十进制常量 • 十六进制常量 • 字符串常量
[名字] 伪操作 [操作数[,操作数,…] [;注释] 例如指示性语句:
DATA1 DB 56H,78H,9AH ;定义字节型数据,“DB”是伪操作
指令性语句与指示性语句在格式上的区别:
⑴ 指令性语句中的“标号”表示指令的符号地址, 其后面通常要加上“:”。
指示性语句中的“名字”通常表示变量名、段名和 过程名等,其后不加“:”。名字在多数情况下表 示的是变量名,用来表示存储器中一个数据区的 地址。
⑴ 一个常数表达式; ⑵ 问号(?)作为非确定的初始值; ⑶ 一个或多个字符的字符串; ⑷ 重复子句: 重复次数 DUP(表达式)…
例如:
DATA1 DB 11H,22H,33,44H,55H ;定义了5个字节常
4.表达式
表达式是由常数、操作数、操作符和运算符组合而成
表达式中常用的运算符有以下几种:
⑴ 算术运算符
算术运算符有+(加)、-(减)、*(乘)、/(除)、MOD(取余)等 ⑵ 逻辑运算符
逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异 或)
例如:指令MOV AL,0A6H XOR 0CEH等价于MOV AL,68H
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)之 后表示段超越,用来指定一个存储器操作数的段属性。
第四章汇编语言程序设计
精品jing
[例4-1] 两个字(A6B8H, 206DH)相加
的完整的汇编语言程序
DATA SEGMENT
;定义数据段
DATA1
DW
0A6B8H
;定义被加数
DATA2
DW
206DH
;定义加数
SUM
DW 2 DUP(?)
;定义和
DATA ENDS
;数据段结束
CODE
SEGMENT
⑷ 取值运算符
取值运算符用来分析一个存储器操作数的属性
• OFFSE址。例如:
MOV SI,OFFSET DATA1 ;将变量DATA1的偏移地址送SI 该指令等同于以下指令:
LEA SI,DATA1
• SEG
利用运算符SEG可以得到一个标号或变量的段地址。例如: