微机原理课件第四章 汇编语言程序设计
合集下载
微机原理与应用-04 汇编语言

例:把片外RAM2200H单元中的数送入片内70H单元中。
BEGIN:MOV
MOV MOVX MOV
13
DPTR,#2200H ;(DPTR)=2200H
R0,#70H A,@DPTR @R0,A
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
1、标号字段
后必跟“ :”号; 首字符必是字母,由1~8个ASCII 码 字符组成; 同一标号在一个程序中只能定义一次; 不能使用指令助记符、伪指令、寄存器 的符号名称; 一条语句的标号可有可无,取决于本程 序的其他语句是否访问该条语句。
《微机原理及应用》课件
(2) 机器汇编
汇编语言 源程序
汇编
机器语言 目标程序
汇编程序
用机器汇编,方便快捷,并能在汇 编过程中发现语法错误。
8
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
Medwin汇编环境示例
9
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
《微机原理及应用》课件
2. 汇编语言
面向机器的符号语言,指令用助记符表示; 指令直接访问CPU的寄存器、存储单元和 I/O端口,响应速度快,程序的存储空间 利用较高; 汇编语言是面向机器的语言,因此使用者 必须对机器的硬件结构和指令系统比较熟 悉。
5
南京航空航天大学机电学院机械电子工程系 2005年
33
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
(2)子程序的参数传递
a. 利用寄存器(R0~R7和A)传递参数
四章汇编语言程序设计ppt课件

指令助记符:MOV,ADD,…. 指示性(伪指令)操作符:DB,DW,SEGMENT,
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
微机原理与接口技术PPT_第4章 汇编语言程序设计

分段结构 程序按段编写, 内存分段编址相对应。 程序按段编写 与8086内存分段编址相对应。 内存分段编址相对应 每段由伪操作SEGMENT开始、由ENDS结束。 开始、 结束。 每段由伪操作 开始 结束 程序可由多个段构成,至少有一个代码段。 程序可由多个段构成,至少有一个代码段。 程序最后为END结束语句,后跟一启动地址。 程序最后为 结束语句,后跟一启动地址。 结束语句 启动地址指示程序开始执行的第一条语句。 启动地址指示程序开始执行的第一条语句。 程序中设有返回DOS的功能。 的功能。 程序中设有返回 的功能 使程序执行完后返回DOS系统的命令接受状态。 系统的命令接受状态。 使程序执行完后返回 系统的命令接受状态 程序中用到内存操作数时, 程序中用到内存操作数时, 应按操作数的寻址方式,给相应的段寄存器赋值 应按操作数的寻址方式 给相应的段寄存器赋值
根据语句功能的不同, 名字项可用来表示段名、 根据语句功能的不同, 名字项可用来表示段名、变量名 标号、过程名等。 、 标号、过程名等。 • 名字项用一个符号表示。 名字项用一个符号表示。 对符号的规定: 对符号的规定 ① 由字符 由字符A~Z ,a~z ,0~9及符号 、$、下划线 等组成 及符号@、 、下划线_ 及符号 最长31个字符 超出部分忽略。 个字符, ,最长 个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。 ② 不能用数字打头,以免与十六进制数相混。 不使用汇编程序中的保留字。 如指令的助记符等 如指令的助记符等) ③ 不使用汇编程序中的保留字。 (如指令的助记符等 对定义的符号不区分大小写。但为便于记忆, ④ 对定义的符号不区分大小写。但为便于记忆,名字的定 义应该做到见名知意。 义应该做到见名知意。
例 4-1 给出一个完整的汇编语言源程序 完成两个字节数据相加。 完成两个字节数据相加。
微机原理第4章汇编语言及汇编程序设计

03
目标程序是汇编程序将汇编源程序翻译成机器语言程
序的结果,它由若干个机器语言程序段组成。
顺序程序设计
顺序程序设计是指按 照程序流程顺序执行 指令的程序设计方法。
顺序程序设计简单、 直观,适用于程序流 程比较简单的场合。
在顺序程序中,各条 指令按照它们在源程 序中的出现顺序依次 执行。
分支程序设计
02
汇编语言提供了多种寻址方式,如直接寻址、间接寻址、基 址加变址加位移寻址等。
03
不同的寻址方式可以实现对内存单元、寄存器或立即数的访 问,以满足不同指令的需求。
03 汇编程序设计
汇编程序的基本结构
01 汇编程序由汇编源程序和目标程序组成。
02
汇编源程序是由汇编语言编写的程序,包括指令、伪
指令和宏指令。
02
汇编语言在嵌入式系统中的优势
汇编语言具有直接访问硬件和操作系统的能力,能够提供高效的代码执
行和低延迟响应。
03
嵌入式系统中的常见应用
包括实时控制系统、智能仪表、通信设备等。
汇编语言在系统编程中的应用
系统编程定义
系统编程涉及操作系统内核、设备驱动程序、系统工具等的开发。
汇编语言在系统编程中的优势
02
循环程序设计可以通过使用循环控制指令实现,如LOOP、
WHILE等。
循环程序设计可以提高程序的效率和代码的复用性,减少重复
03
编写代码的工作量。
04 汇编语言与高级语言的接 口
C语言与汇编语言的混合编程
汇编语言嵌入C语言
在C语言程序中直接编写汇编代码,通过特定的关键字进行 标识,编译器会将其嵌入到C语言程序中。
嵌入式系统
在嵌入式系统中,由于硬件资源有限,汇编语言具 有更高的性能和更小的代码体积,因此在嵌入式系 统中广泛应用。
第四章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
微机原理课件第4章 汇编语言程序设计

NEAR表示标号所在语句与转移指令(或调用 指令)在同一代码段内,跳转时只需改变IP。 FAR表示标号所在语句与转移指令(或调用 指令)不在同一代码段内。 若没有对类型进行说明,默认为NEAR。 备 注:标号常作为转移指令或CALL指令的转移地址
11
3、变量 变量用伪指令定义,变量名是内存单元的符号地址。 定义变量就是给变量分配内存单元。 变量也有三个属性:
只能出现在指令性语句中,标号后应加上冒号。
名 字:段、子程序、变量的名字,用来代表它们在存储
器中的地址;只能出现在指示性语句中,名字后 不加冒号。
助记符:指令助记符、伪指令 操作数:指令的操作对象
指令性语句 — 0,1,2个 指示性语句 — 根据需要确定 操作数之间以逗号隔开 操作数可以是寄存器、存储单元、常数或表达式
;汇编前的形式 ;汇编后的形式 ;设TAB偏移地址为1000H
15
2) 逻辑运算符:AND、OR、XOR、NOT
逻辑运算符只能用于数字表达式中。
例如:MOV CL,36H AND 0FH ; 汇编前
MOV CL,06H
; 汇编后
注意:不要把逻辑运算符与逻辑运算指令混淆
例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为3F00H,所以上述 指令与AND AX, 3F00H等价。
体的数值或地址,运行时不能改变。 ➢表达式中的运算符有6类:算术、逻辑、关系、
取地址、属性、杂类。
14
1) 算术运算符:+ - * / MOD
用于数字表达式 例:MOV AX,4*1024 ;汇编前的形式 MOV AX,4096 ;汇编后的形式
用于地址表达式 例: LEA SI,TAB+3 LEA SI,[1003H]
11
3、变量 变量用伪指令定义,变量名是内存单元的符号地址。 定义变量就是给变量分配内存单元。 变量也有三个属性:
只能出现在指令性语句中,标号后应加上冒号。
名 字:段、子程序、变量的名字,用来代表它们在存储
器中的地址;只能出现在指示性语句中,名字后 不加冒号。
助记符:指令助记符、伪指令 操作数:指令的操作对象
指令性语句 — 0,1,2个 指示性语句 — 根据需要确定 操作数之间以逗号隔开 操作数可以是寄存器、存储单元、常数或表达式
;汇编前的形式 ;汇编后的形式 ;设TAB偏移地址为1000H
15
2) 逻辑运算符:AND、OR、XOR、NOT
逻辑运算符只能用于数字表达式中。
例如:MOV CL,36H AND 0FH ; 汇编前
MOV CL,06H
; 汇编后
注意:不要把逻辑运算符与逻辑运算指令混淆
例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为3F00H,所以上述 指令与AND AX, 3F00H等价。
体的数值或地址,运行时不能改变。 ➢表达式中的运算符有6类:算术、逻辑、关系、
取地址、属性、杂类。
14
1) 算术运算符:+ - * / MOD
用于数字表达式 例:MOV AX,4*1024 ;汇编前的形式 MOV AX,4096 ;汇编后的形式
用于地址表达式 例: LEA SI,TAB+3 LEA SI,[1003H]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TRY DB 20 MOV CX,TRY-ARRAY
汇编后: MOV CX,8
13
2.逻辑运算符(按位运算)
• 包括:AND、OR、NOT、XOR
例:AND AL, 8FH AND 73H
↓
↓运算符,汇编过程中完成
指令助记符,程序执行时完成。
3.关系运算符
• 包括:EQ、NE(不等)、LT(小于)、GT(大于)、 LE(≤)、GE(≥)
常用法:MOV AX,SEG M1(或用段名)
MOV DS, AX
②OFFSET 变量/标号 ;取偏移地址值
常用法:MOV BX,OFFSET DA1 ;设地址指针
LEA BX,DA1
③TYPE 变量/标号 ;取类型属性
变量返回1(DB)、2(DW)、4(DD)等
标号返回-1(NEAR)、-2(FAR)
11
①常量:固定值,不能改变 a.数字常数:字母后缀B、Q(或O)、D可省略、H b.字符串常数:‘ABC’ASCII码字节序列41H、42H、43H c.符号常数:COUNT EQU 100
②变量:某操作数据所存放单元的符号地址,在CS以外的其 它段由DB、DW等定义
③标号:某条指令所存放单元的符号地址,在CS中定义 变量和标号均具有三种属性: a.段值(SEGMENT):可用分析运算SEG取出 b.段内偏移地址(OFFSET):可用分析运算OFFSET取出 c.类型(TYPE):可用分析运算TYPE取出
变量:每个元素所包含的字节数,有BYTE、WORD和DWORD 三种类型。 标号:可转移的距离(或距离属性),有NEAR和FAR两种。
12
四、MASM中的表达式 • 表达式由运算对象和运算符组成,在汇编过程中
完成表达式运算。其中运算对象可以是常数、变 量、标号、寄存器等。 1.算术运算符(运算对象和运算结果均为整数) • 包括:+、- 等,常用于地址运算。 • 注:两符号地址相减表示某符号地址占用的内存 字节数。 【例】ARRAY DB 1,2,3,4,5,6,7,8
a.结果为真,输出全1
(字节运算为OFFH或字运算为OFFFFH)
b.结果为假,输出全0
【例】 MOV AX,10H GE 16
汇编后:MOV AX,0FFFFH
14
4.数值返回运算符(或分析运算符)
功能:返回运算对象的某个参数值。
• 包括:SEG、OFFSET、TYPE、LENGTH、SIZE
①SEG 变量或标号 ;取段基址
MOห้องสมุดไป่ตู้ DS,AX
MOV AH,9 ;9号调用,显示字符串,以‘$’结束
MOV DX,OFFSET STRING
INT 21H
MOV AH,4CH
;返回DOS
INT 21H
CODE ENDS ;代码段结束
END START ;源程序结束
7
• 由例程看出: (1)8086汇编源程序具有分段结构
段名 SEGMENT ……
END START ;源程序结束
6
【例】显示输出“Hello!”
DATA SEGMENT ;数据段
STRING DB ‘Hello!’,‘$’
DATA ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA ;段分配
START: MOV AX,DATA ;初始化DS
PUSH DS ;将DOS段值和偏移量(0)入栈 MOV AX,0 PUSH AX …… RET ;返回DOS(将0和DOS段值→IP、CS) MAIN ENDP ;主过程结束 ②使用4CH号的DOS系统功能调用 MOV AX,4C00H(或MOV AH ,4CH) INT 21H (4)全部源程序用END伪指令结束。
PUSH DS ;为返回DOS设置堆栈
MOV AX,0
PUSH AX
MOV AX,DATA ;初始化DS
MOV DS,AX
MOV AH,9 ;9号调用,显示字符串,以‘$’结束
MOV DX,OFFSET DA1
INT 21H
RET
;返回DOS
MAIN ENDP ;主过程结束
CODE ENDS ;代码段结束
为汇编程序提供汇编信息。 • 格式:
名字 伪指令指示符 操作数,操作数 ;注释 ①名字:给伪指令取的名称,用符号地址表示,名字后不带
冒号“:”,只用空格符与伪指令指示符相分隔; ②伪指令指示符:是MASM规定的符号,明确不同的操作; ③操作数:规定同指令性语句,区别在于操作数可能多于2
个; ④注释:规定同指令性语句 • 其中不可省略的部分是伪指令指示符,其余均可缺省。 三、数据项 • 操作数的三种基本数据项:常数、变量、标号
(0FFH)
(0FEH)
15
DATA SEGMENT
;定义数据段
VAR1 DB 10H,18H,25H,34H ;定义字节数据
VAR2 DW 2300H,1200H
;定义字数据
VAR3 DD 11002200H,33004400H ;定义双字数据
DATA ENDS
;数据段结束
设DATA段起始于物理地址30000H处,则
9
4-1 汇编语言程序格式
MASM中可使用的语句分成两类:指令性语句和伪指令语句。 一、指令性语句 • 特点:与机器指令相对应,汇编时产生目标代码。 • 标号:指令助记符 操作数,操作数 ;注释 ①标号:表示本指令语句的符号地址,后跟冒号“:”,用
作转移的目标地址; ②指令助记符:指出指令的操作类型,由英文字母缩写而成; ③操作数:指明参加指令运算的数据,有无操作数、单操作
数和双操作数之分,其中双操作数之间用逗号“,”分隔, 操作数与指令助记符之间用空格隔开; ④注释:用来说明一条指令或一段程序的功能,前面以分号 “;”为标记,汇编程序对注释不进行汇编,增加可读性 • 其中指令助记符是关键字,不可省略,其余部分均可省略。
10
二、伪指令语句 • 特点:没有对应的机器指令(本身不产生目标代码),只
段名 ENDS 在源程序中各段的顺序可以任意,段的数目可根 据需要确定(至少有一个代码段),原则上不受 限制。而每个段又是由若干语句组成,语句是汇 编语言源程序的基础。 (2)CS不能人为设置,其它段寄存器的初始化需两条 指令完成(MOV AX,DATA MOV DS,AX)。
8
(3)两种返回DOS的方法: ①MAIN PROC FAR ;将主程序建立为过程
汇编后: MOV CX,8
13
2.逻辑运算符(按位运算)
• 包括:AND、OR、NOT、XOR
例:AND AL, 8FH AND 73H
↓
↓运算符,汇编过程中完成
指令助记符,程序执行时完成。
3.关系运算符
• 包括:EQ、NE(不等)、LT(小于)、GT(大于)、 LE(≤)、GE(≥)
常用法:MOV AX,SEG M1(或用段名)
MOV DS, AX
②OFFSET 变量/标号 ;取偏移地址值
常用法:MOV BX,OFFSET DA1 ;设地址指针
LEA BX,DA1
③TYPE 变量/标号 ;取类型属性
变量返回1(DB)、2(DW)、4(DD)等
标号返回-1(NEAR)、-2(FAR)
11
①常量:固定值,不能改变 a.数字常数:字母后缀B、Q(或O)、D可省略、H b.字符串常数:‘ABC’ASCII码字节序列41H、42H、43H c.符号常数:COUNT EQU 100
②变量:某操作数据所存放单元的符号地址,在CS以外的其 它段由DB、DW等定义
③标号:某条指令所存放单元的符号地址,在CS中定义 变量和标号均具有三种属性: a.段值(SEGMENT):可用分析运算SEG取出 b.段内偏移地址(OFFSET):可用分析运算OFFSET取出 c.类型(TYPE):可用分析运算TYPE取出
变量:每个元素所包含的字节数,有BYTE、WORD和DWORD 三种类型。 标号:可转移的距离(或距离属性),有NEAR和FAR两种。
12
四、MASM中的表达式 • 表达式由运算对象和运算符组成,在汇编过程中
完成表达式运算。其中运算对象可以是常数、变 量、标号、寄存器等。 1.算术运算符(运算对象和运算结果均为整数) • 包括:+、- 等,常用于地址运算。 • 注:两符号地址相减表示某符号地址占用的内存 字节数。 【例】ARRAY DB 1,2,3,4,5,6,7,8
a.结果为真,输出全1
(字节运算为OFFH或字运算为OFFFFH)
b.结果为假,输出全0
【例】 MOV AX,10H GE 16
汇编后:MOV AX,0FFFFH
14
4.数值返回运算符(或分析运算符)
功能:返回运算对象的某个参数值。
• 包括:SEG、OFFSET、TYPE、LENGTH、SIZE
①SEG 变量或标号 ;取段基址
MOห้องสมุดไป่ตู้ DS,AX
MOV AH,9 ;9号调用,显示字符串,以‘$’结束
MOV DX,OFFSET STRING
INT 21H
MOV AH,4CH
;返回DOS
INT 21H
CODE ENDS ;代码段结束
END START ;源程序结束
7
• 由例程看出: (1)8086汇编源程序具有分段结构
段名 SEGMENT ……
END START ;源程序结束
6
【例】显示输出“Hello!”
DATA SEGMENT ;数据段
STRING DB ‘Hello!’,‘$’
DATA ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA ;段分配
START: MOV AX,DATA ;初始化DS
PUSH DS ;将DOS段值和偏移量(0)入栈 MOV AX,0 PUSH AX …… RET ;返回DOS(将0和DOS段值→IP、CS) MAIN ENDP ;主过程结束 ②使用4CH号的DOS系统功能调用 MOV AX,4C00H(或MOV AH ,4CH) INT 21H (4)全部源程序用END伪指令结束。
PUSH DS ;为返回DOS设置堆栈
MOV AX,0
PUSH AX
MOV AX,DATA ;初始化DS
MOV DS,AX
MOV AH,9 ;9号调用,显示字符串,以‘$’结束
MOV DX,OFFSET DA1
INT 21H
RET
;返回DOS
MAIN ENDP ;主过程结束
CODE ENDS ;代码段结束
为汇编程序提供汇编信息。 • 格式:
名字 伪指令指示符 操作数,操作数 ;注释 ①名字:给伪指令取的名称,用符号地址表示,名字后不带
冒号“:”,只用空格符与伪指令指示符相分隔; ②伪指令指示符:是MASM规定的符号,明确不同的操作; ③操作数:规定同指令性语句,区别在于操作数可能多于2
个; ④注释:规定同指令性语句 • 其中不可省略的部分是伪指令指示符,其余均可缺省。 三、数据项 • 操作数的三种基本数据项:常数、变量、标号
(0FFH)
(0FEH)
15
DATA SEGMENT
;定义数据段
VAR1 DB 10H,18H,25H,34H ;定义字节数据
VAR2 DW 2300H,1200H
;定义字数据
VAR3 DD 11002200H,33004400H ;定义双字数据
DATA ENDS
;数据段结束
设DATA段起始于物理地址30000H处,则
9
4-1 汇编语言程序格式
MASM中可使用的语句分成两类:指令性语句和伪指令语句。 一、指令性语句 • 特点:与机器指令相对应,汇编时产生目标代码。 • 标号:指令助记符 操作数,操作数 ;注释 ①标号:表示本指令语句的符号地址,后跟冒号“:”,用
作转移的目标地址; ②指令助记符:指出指令的操作类型,由英文字母缩写而成; ③操作数:指明参加指令运算的数据,有无操作数、单操作
数和双操作数之分,其中双操作数之间用逗号“,”分隔, 操作数与指令助记符之间用空格隔开; ④注释:用来说明一条指令或一段程序的功能,前面以分号 “;”为标记,汇编程序对注释不进行汇编,增加可读性 • 其中指令助记符是关键字,不可省略,其余部分均可省略。
10
二、伪指令语句 • 特点:没有对应的机器指令(本身不产生目标代码),只
段名 ENDS 在源程序中各段的顺序可以任意,段的数目可根 据需要确定(至少有一个代码段),原则上不受 限制。而每个段又是由若干语句组成,语句是汇 编语言源程序的基础。 (2)CS不能人为设置,其它段寄存器的初始化需两条 指令完成(MOV AX,DATA MOV DS,AX)。
8
(3)两种返回DOS的方法: ①MAIN PROC FAR ;将主程序建立为过程