汇编语言程序设计(第二版)第五章PPT课件
合集下载
第5章 汇编语言程序设计20PPT课件
第5章 汇编语言程序设计
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。
第05章汇编语言及程序设计ppt课件
汇编语言 源程序
汇编
目标程序
汇编程序
一一对应
汇编语言的指令
机器语言的指令
汇编语言程序设计的特点:
➢ 汇编语言是面向机器的语言,CPU不同的机器有不同 的汇编语言
➢ 可以充分利用机器的硬件功能和结构特点
➢ 可有效地加快程序的执行速度,减少目标程序所占用 的存储空间
➢ 可以对输入/输出端口进行控制,实时性能好 ➢ 汇编语言程序移植性、通用性、可读性差
第 5 章 程序设计及汇编语言
内容安排
一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作
§5.1 程序设计步骤
(1〕分析问题 (2〕建立数学模型 (3〕确定算法 (4〕绘制程序流程图 (5〕内存空间分配 (6〕编制程序与静态检查 (7〕程序调试〔实验)
[名字] DW <表达式或数据项表> 功能:表达式或项表中的每一项是一个/两个字
节数,他们从符号名地址开始按字节连续存放, 如:直D到1 表中DB数据12H项, 结12H束 12H
D1 DB 3 DUP (12H) MOV AX, D1
注意:① 表达式或数据项表多于一项时,项与项之间用 逗号“,”或空格分隔
MOV BL,0FFH ;将FFH送入BL寄存器
LOut: MOV AL,BL
OUT 73H,AL ;将结果的标志数据输出到 73H端口
HLT
;暂停
Lw10: MOV BL,00H
JMP LOut
L10to20: MOV BL,88H
JMP LOut
3. 循环程序
强制CPU重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:
汇编语言程序设计ppt课件
3.用注释行说明程序,便于阅读和修改调试和修改。
1
9
常用程序结构: 顺序程序、循环程序、分支程序、查表程序、子程
2. 顺序与循环程序设计
❖5.2.1 顺序程序设计(又称简单程序) 既无分支,又无循环,按照顺序执行 可完成一定的基本功能,是编写复杂程序的 基础
10
例1:将一个字节内的两个BCD码拆开并变成ASCII码, 存入两个RAM单元。BCD码放在内RAM的20H, 转换后高半字节放到21H,低字节放22H。
ROM
20H BCDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21H 0011 BCDH ;完成转换 @R0 22H 000101 B0C0D0L0
;存数
END
12
回目录 上页 下页
5.2.2 循环程序
包含多次重复执行的程序段,循环结构使程序紧凑。
11
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B0C0D01H01 B0BCC0DD0LH0
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
表示程序结构和程序功能
美国国家标准化协会ANSI(American National
Standard Institute)设定了一些常用的流程图符号如图所示:
开始
起止框
或
流程线
输入输出框 判断框
处理框
连接点 图:常用流程图符号
Y
?
第5章 汇编语言程序设计ppt课件
;段分配
START:MOV AX,DATA MOV DS,AX MOV AL,BUF1 ADD AL,BUF2 MOV SUM,AL MOV AH,4CH INT 21H
CODE ENDS END START
;填装数据段寄存器DS ;取第一个加数 ;和第二个加数相加
代 码 段
;返回DOS状态 ;CODE段结束 ;整个源程序结束
第5章 汇编语言程序设计
5.1 汇编语言程序格式 5.2 常用伪指令 5.3 汇编语言的编写 5.4 DOS功能调用 5.5 汇编语言设计
最新课件
教学重点
本章介绍程序结构、伪指令、DOS功能调用。 重点:汇编语言程序的基本结构;
伪指令及其使用方法; DOS功能调用; 基本的汇编语言程序设计方法。 难点:DOS功能调用的应用 汇编语言程序的设计
算术运算符
运 算
逻辑运算符
符
及 关系运算符
表
达 式
分析运算符
综合运算符
+、—、*、/、MOD
与数学运算符的意义相同。
A取N模D是、取OR余、数N。OT、XOR E例运Q:算、82结NEM果、O是LD一T、1个6G常;T数、结.L果E、为G2 E 两个2表0H达M式O比D较7时; ,结表果达为式4表示 方法/性质要相同 关时SSEI系Z,GE成为、、立全OT,YF0PF结SE果ET为、全LE1;NG不T成H、立 例把T规等偏H如存定价移IS:储存于地、指单储址MP令元OT单RV地M元OB址的XV分,性B解0X质;,为3段2地EQ址4和5
作用:由编程者按照一定的规则来定义的一种较“宏 大”的指令,包括多条指令或伪指令 。
最新课件
例题1
SEGMENT
ENDS
汇编语言程序设计 第五章 课件
(3)串搜索指令 SCAS
LEA DX,ASS MOV AH,10 INT 21H LEA DI,ASS+2 ;输入串首址→DI MOV CL,ASS+1 ;输入串长度→CX MOVZX CX,CL MOV AL,′A′ ;计数器清零 MOV BX,0 P: REPNE SCASB ;查找字符‛A” JE A ;查到字符‛A”转A处执行 ;全部查完转结束 JMP OUT1 ;所有判断完否 A: CMP CX,0 JE OUT1 ;全部查完转结束 CMP BYTE PTR [DI], ‘M’ ;判断‛A”后的字符为‛M”否 JNE B ;不是转B处执行 INC BX ;是‛AM”计数器加1 B: JMP P ;未完转P继续判断 OUT1:MOV AH,4CH ;返回操作系统 INT 21H CODE ENDS END START
(1)串操作指令MOVS、CMPS、SCAS的 使用格式及功能; (2)简单宏指令的定义与调用方式; (3)模块程序设计的方法。
第五章
程序设计的其它方法与技术 三、本章学习的难点:
(1)MOVS与MOV、CMPS与CMP功能上
的差别及串操作指令的正确使用方法; (2)宏指令的定义与调用方式; (3)模块之间的组合、定位及通信方式; (4)模块化程序设计技术。
(5)存储字节/字/双字指令 STOS
●格式: ●功能:
STOS
OPD 或
STOSB 往字节串中存数 STOSW 往字串中存数 STOSD 往双字串中存数
⑴ 字节操作:(AL)→ ES:[DI]/[EDI] 字操作: (AX)→ ES:[DI]/[EDI] 双字操作:(EAX)→ES:[DI]/[EDI] 即将AL(或AX、EAX)中的数据送入DI/EDI所指的目的串中的字节(或 字、双字)存储单元中。修改指针DI/EDI,使之指向串中的下一个元素。 ⑵ 修改串指针,使之指向下一元素,修改方式为: i.当DF=0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或 4(双字操作)。 ii.当DF=1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或 4(双字操作)。 说明:该指令执行后,并不影响标志位,因而它一般只带REP重复前缀, 用来将一片连续的存储字节(或字)单元臵相同的值。
《汇编语言程序设计》第5章基本汇编语言程序设计.ppt
汇编语言程序设计的基本步骤: 1.分析题意,确定数据结构和算法 2.根据算法绘制程序流程图 3.根据流程图编写程序 4.调试程序
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
精品PPT课件--第5章汇编语言程序设计
指示性语句的格式为:
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无 机器码指令与其相对应。
指示性语句汇编时不生成机器码。
显然,第二种写法要比第一种写法要好。
2021/1/20
23
5.3 伪操作命令
由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有:
• 数据定义伪指令 • 符号定义伪指令 • 段定义和段寄存器指定伪指令 • 过程定义伪指令 • 结束伪指令
2021/1/20
24
5.3.2 数据定义伪指令
➢ 变量在程序中作为存储器操作数被引用。 •标号和变量名的使用规则
– 组成:A-Z(不分大小写), 0-9, ?@ . _ $ – 不能以数字开头 – 长度小于31个字符 – 不能与保留字(指令助记符、伪指令、预定义符号等)重名 – 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1
(1)算术运算符—— +、-、*、/,MOD
➢ 用于数字表达式,例: MOV AX,4*1024
汇编后的形式为:
MOV AX,4096
➢ 用于地址表达式,例: LEA SI,TAB+3
若TAB的偏移地址为1000H,则汇编后的形式为:LEA
SI,1003H
2021/1/20
16
(2)逻辑运算符—— AND、OR、XOR、NOT
INT 21H
;返回DOS
CODE ENDS
;代码段结束
END START
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无 机器码指令与其相对应。
指示性语句汇编时不生成机器码。
显然,第二种写法要比第一种写法要好。
2021/1/20
23
5.3 伪操作命令
由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有:
• 数据定义伪指令 • 符号定义伪指令 • 段定义和段寄存器指定伪指令 • 过程定义伪指令 • 结束伪指令
2021/1/20
24
5.3.2 数据定义伪指令
➢ 变量在程序中作为存储器操作数被引用。 •标号和变量名的使用规则
– 组成:A-Z(不分大小写), 0-9, ?@ . _ $ – 不能以数字开头 – 长度小于31个字符 – 不能与保留字(指令助记符、伪指令、预定义符号等)重名 – 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1
(1)算术运算符—— +、-、*、/,MOD
➢ 用于数字表达式,例: MOV AX,4*1024
汇编后的形式为:
MOV AX,4096
➢ 用于地址表达式,例: LEA SI,TAB+3
若TAB的偏移地址为1000H,则汇编后的形式为:LEA
SI,1003H
2021/1/20
16
(2)逻辑运算符—— AND、OR、XOR、NOT
INT 21H
;返回DOS
CODE ENDS
;代码段结束
END START
汇编语言第5章汇编语言程序设计基本技术PPT课件
具体操作:将IP的内容修改为标号的偏移地址,将CS的内容修改为标号所在段的段地 址。
【例5-6】无条件段内间接转移示例
CODE1
SEGMENT
┇
JMP
SHORT LAB1
┇
CODE1
ENDS
CODE2
SEGMENT
┇
LAB1:ADD AL,1
┇
CODE2
ENDS
上例中,JMP指令与LAB1分别在代码段CODE1、CODE2中,属于段内间接转移,需 同时修改IP和CS的值。
9
5.2.1转移指令
1.无条件转移指令 无条件转移指令的功能是使程序无条件地转移到指定的目标地址处。无
条件转移指令执行后,程序将从目标地址处的指令开始继续执行。 (1)段内直接转移 格式:JMP [SHORT|NEAR PTR] 标号 说明:该标号与当前无条件转移指令处于同一个代码段中。格式中的
SHORT运算符表明指令代码中的操作数是8位偏移量,用补码表示。 取值范围为-128~+127,目标地址与当前无条件转移指令的距离在128~+127字节范围内,叫做短转移。而NEAR PTR运算符表明指令 代码中的操作数是16位偏移量,用补码表示。取值范围为32768~+32767。目标地址与当前无条件转移指令的距离在32768~+32767字节范围内,叫做近转移。SHORT和NEAR PTR都可 以省略不写。由汇编程序在汇编过程中自行计算得出是8位偏移量或 16位偏移量。 功能:转移到标号指定的代码处执行。 具体操作:将IP的内容修改为标号的偏移地址,CS的内容不变。
开始
【例5-1】对于三个8位无 符号数81H、52H和15H, 编写R=81H*52H+15H的 程序。
第51章汇编语言程序设计ppt课件
CODE ENDS END START
精品课件
【例5.8】试编写一程序,要求比较两个 字符串STR1和STR所含字符是否相同,若 相同则显示‘MATCH!’,若不相同则显 示‘NO MATCH!’。(程序略)
其流程图如图5.7所示。
精品课件
•.
图 5 7 程 序 流 程 图
精品课件
此课件下载可自行编辑修改,供参考! 感谢您的支持,我们努力做得更好!
MAX DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
精品课件
START:MOV AX,DATA
MOV DS,AX
MOV AX,X
CMP AX,Y;X>Y?
JG L1
MOV AX,Y;Y>Z?
L1: CMP AX,Z ;X>Z?
START:MOV AX,DATA
MOV DS,AX
;将数据段段地址送入DS
MOV BX, X
MOV AX, Y
ADD AX,BX
;加法
MOV CL,3
SAL AX,CL
;算术左移3次,相当于乘以8
SUB AX,X
;减法
SAR AX,1
;算术右移1次,相当于除以2
MOV Z,AX
MOV AH,4CH
概述 顺序程序设计 分支程序设计 循环程序设计 子程序设计 模块化程序设计
精品课件
开始
5.1 概述
5.1.1 汇编语言程序设计的一般步骤 5.1.2 流程图
精品课件
返回本章首页
5.1.1 汇编语言程序设计的一般步骤
汇编语言程序设计一般有以下几 个步骤: 1.分析问题,确定算法 2.绘制流程图 3.根据流程图编制程序 4.调试程序
精品课件
【例5.8】试编写一程序,要求比较两个 字符串STR1和STR所含字符是否相同,若 相同则显示‘MATCH!’,若不相同则显 示‘NO MATCH!’。(程序略)
其流程图如图5.7所示。
精品课件
•.
图 5 7 程 序 流 程 图
精品课件
此课件下载可自行编辑修改,供参考! 感谢您的支持,我们努力做得更好!
MAX DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
精品课件
START:MOV AX,DATA
MOV DS,AX
MOV AX,X
CMP AX,Y;X>Y?
JG L1
MOV AX,Y;Y>Z?
L1: CMP AX,Z ;X>Z?
START:MOV AX,DATA
MOV DS,AX
;将数据段段地址送入DS
MOV BX, X
MOV AX, Y
ADD AX,BX
;加法
MOV CL,3
SAL AX,CL
;算术左移3次,相当于乘以8
SUB AX,X
;减法
SAR AX,1
;算术右移1次,相当于除以2
MOV Z,AX
MOV AH,4CH
概述 顺序程序设计 分支程序设计 循环程序设计 子程序设计 模块化程序设计
精品课件
开始
5.1 概述
5.1.1 汇编语言程序设计的一般步骤 5.1.2 流程图
精品课件
返回本章首页
5.1.1 汇编语言程序设计的一般步骤
汇编语言程序设计一般有以下几 个步骤: 1.分析问题,确定算法 2.绘制流程图 3.根据流程图编制程序 4.调试程序
第5章汇编语言程序设计(9)ppt课件
首地址BASE
SUB1 L SUB1 H SUB2 L SUB2 H
表地址=表首地址+偏移量 偏移量=(k -1)*2 例5.9
k=1,2,3……..n
表地址
SUB3 L SUB3 H
┆
SUBn H SUBn H
1)用跳转表实现多路分支
表首址BASE
E9 SUB1 L SUB1 H E9 SUB2 L
5.2 分支结构
5.2.1 分支程序设计概述 分支程序结构可以有两种形式,如图所示
5.2 分支结构
例5.2 从键盘输入一位数字, 判断其奇偶性,输出一个标 志(0,1)。 1.键盘输入一个字符: MOV AH,01H INT 21H 2.判断奇偶: RCR AL,1 JC EVN
3. 输出一个字符 MOV AH,02H MOV DL,’ ’ INT 21H
5.3 循环结构程序设计
②条件控制 有些情况下,循环次数事先无法确定,但它与问题的某些条 件有关。这些条件可以通过指令来测试。若测试比较的结果 表明满足循环条件,则继续循环,否则结束循环。 [例]:统计AX寄存器中1的个数,并将结果存放在CL寄存器中。 … MOV CL,0 L: AND AX,AX JZ EXIT ;循环结束条件:AX=0 SAL AX,1 ;将AX中的最高位移入CF中 JNC L ;如果CF=0,转L INC CL ;如果CF=1,则(CL)+1→CL JMP L ;转L处继续循环 EXIT:…
JMP SUB1
JMP SUB2 表地址=表首地址+偏移量 偏移量=(k -1)*3 k=1,2,3……..n 例5.10 例5.10R
表地址
SUB2 H E9 SUB3 H SUB3 H ┇ E9 SUBn L SUBn H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MACRO retnum mov al,retnum mov ah,4ch int 21h ENDM
;;带有形参retnum ;;宏定义中使用参数
宏调用
宏名 [实参表]
start: mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 ;宏调用,显示字符串 ;宏调用,返回DOS
过程名 ENDP
➢要 调 用 带➢参过数程声过明程伪定指义令:的用过于程事,先声不明应过采程用的结构 CALL指令过,程因名为比较PR烦O琐TO 调用距离 语言类型, 参数:类型 ➢应该采用过程调用伪指令INVOKE ➢使 用 INV➢O过K程E调伪用伪指指令令的 前 提 是 需 要 用 PROTO伪指令对过程IN进VO行K声E 明过程名,参数,...
mov al,_a
imul _c
mov cx,4
imul cx
例5.1-1/2
;bx中为b2 ;ax中为4ac
例5.1-2/2
.if sword ptr bx >= ax ;比较二者大小 mov tag,1
;第一分支体:条件满足,tag←1 .else
mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0
mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C0001: dec ax .ENDIF *@C0003:
.data
_a
sbyte ?
_b
sbyte ?
_c
sbyte ?
tag byte ?
.code
.startup
mov al,_b
imul al
mov bx,ax
.else .break
.endif inc bx inc bx .untilcxz mov result,ax
例5.2
第5 章
5.1.3 过程声明和过程调用伪指令
过程名 PROC 调用距离 语言类型 作用范围 <起始参数>
USES 寄存器列表, 参数:类型
LOCAL 参数表 …
;汇编语言语句
如何调 用
过程声明和过程调用伪指令
.PROTO .INVOKE
-
第5 章
5.1.1 条件控制伪指令
➢ 类似高级语言中IF、THEN、ELSE和ENDIF 的相应功能
➢ 在汇编时要展开,自动生成相应的比较和条 件转移指令序列,实现程序分支
.IF 条件表达式 分支体
[ .ELSE 分支体
.ENDIF
-
;条件为真(值为非0)
;执行分支体
;前面IF条件为假
;执行分支体 ]
;分支结束
条件
;单分支结构
例题
.IF AX < 0
neg ax
.ENDIF
mov result,ax
;双分支结构
.IF ax==5
mov bx,ax
mov ax,0
.ELSE
dec ax
.ENDIF
;双分支结构 .IF ax==5
* cmp ax,05h * jne @C0001
——宏汇编时实现
宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令
-
宏定义
宏名 macro [形参表] 宏定义体 endm
mainbegin
MACRO ;;定义名为mainbegin的宏,无参数
mov ax,@data
;;宏定义体
mov ds,ax ENDM
宏注释符 ;;宏定义结束
mainend第5 章 Nhomakorabea5.1.2 循环控制伪指令
➢WHILE结构的循环控制伪指令
.WHILE 条件表达式 ;条件为真 循环体 ;执行循环体
.ENDW ;循环体结束
➢UNTIL结构的循环控制伪指令
.REPEAT ;重复执行循环体 循环体
.UNTIL 条件表达式 ;直到条件为真
-
求1~100之和
;WHILE结构 xor ax, ax mov cx,100 .while cx!=0 add ax,cx dec cx .endw mov sum,ax
-
;汇编语言程序:lt503.asm
例5.3-1/2
.model small
checksumd PROTO c,:word,:word
;声明过程
.stack
.data
array db 12h,25h,0f0h,0a3h,3
db 68h,71h,0cah,0ffh,90h
count equ $-array
宏汇编 重复汇编 条件汇编 ——统称宏结构
宏(Macro)是汇编语言的一个特 点,它是与子程序类似又独具特色的 另一种简化源程序的方法
-
第5 章
5.2.1 宏汇编
宏——具有宏名的一段汇编语句序列 ——宏定义时书写
宏指令——这段汇编语句序列的缩写 ——宏调用时书写
宏展开——宏指令处用这段宏代替的过 程
第5 章
教学重点
在掌握基本的汇编语言程序 设计方法之后,进一步学习 如何提高编程效率的各种实 用方法: ✓高级语言特性 ✓宏结构 ✓模块化
-
第5 章
5.1 高级语言特性
➢MASM 6.0引入高级语言的程序设计 特性
条件控制伪指令
.IF .ELSE .ENDIF
循环控制伪指令
.WHILE .ENDW .REPEAT .UNTIL
;数组的元素个数
result db ?
;校验和
.code
.startup
INVOKE checksumd,count,offset array
;调用过程
mov result,al
;保存校验和
.exit 0
列表文件
例5.3-2/2
checksumd PROC c USES bx cx,\
countp:word,arrayp:word
;UNTIL结构 xor ax, ax mov cx,100 .repeat add ax,cx dec cx .until cx==0 mov sum,ax
mov cx,100 xor ax,ax lea bx,array .repeat
.if sword ptr [bx] >= 0 add ax,[bx]
mov bx,arrayp ;BX←数组的偏移地址
mov cx,countp ;CX←数组的元素个数
xor al,al
sumd: add al,[bx] ;求和:AL←AL+DS:[BX]
inc bx
loop sumd
ret
checksumd endp end
列表文件
第5 章
5.2 宏结构程序设计
➢ 宏调用的实质是在汇编过程中进行宏展开
➢ 宏展开的具体过程是:当汇编程序扫描源程序遇 到已有定义的宏调用时,即用相应的宏定义体取代 源程序的宏指令,同时用位置匹配的实参对形参进 行取代