微机原理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
微机原理课件(09秋)第五章 汇编语言程序设计
第五章 汇编语言程序设计
3.变量 3.变量
变量——即内存中的存储单元或数据区。 即内存中的存储单元或数据区。 变量 即内存中的存储单元或数据区 变量名——是存储单元(数据区)的符号地 是存储单元( 变量名 是存储单元 数据区) 址或名字。 址或名字。 变量也有三个属性: 变量也有三个属性:
• 段地址—变量所在段的段地址 段地址 变量所在段的段地址 • 偏移量 变量单元地址与段首地址之间的位移量 偏移量—变量单元地址与段首地址之间的位移量 • 类 型—有BYTE、WORD和DWORD三种 有BYTE、WORD和DWORD三种
字符串常数: 字符串常数:
包含在单引号中的若干字符。 包含在单引号中的若干字符。 汇编时被翻译成对应的ASCII ASCII码 汇编时被翻译成对应的ASCII码
第五章 汇编语言程序设计
2.标号 2.标号——指令所在内存单元的符号地址 标号 指令所在内存单元的符号地址
有三个属性: 有三个属性: 段地址:即标号所在段的段地址; 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 偏移量:标号所代表存储单元的段内偏移地址; NEAR或FAR: 类 型:NEAR或FAR: NEAR—表示标号所在语句与转移指令 表示标号所在语句与转移指令/ NEAR 表示标号所在语句与转移指令/ 调用指令在同一码段内。 调用指令在同一码段内。 FAR—标号所在语句与转移指令 标号所在语句与转移指令/ FAR 标号所在语句与转移指令/调用 指令不在同一代码段内。 指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR NEAR。 若没有对类型进行说明,默认为NEAR。 转移指令或 指令的转移地址 标号通常作为转移指令 CALL指令的转移地址。 标号通常作为转移指令或CALL指令的转移地址。
微机原理第五章汇编语言程序的设计课件
DB:定义字节变量,即其后的每个操作数均占1个字节; DW:定义字变量,即其后的每个操作数均占2个字节; DD:定义双字变量,即其后的每个操作数均占4个字节; DQ:定义4字变量,即其后的每个操作数均占8个字节; DT:定义10字节变量,即其后的每个操作数均占10个字节。 注意: 存放多字节数据时,数据高字节存放在高地址单元,低字 节存放在低地址单元。
汇编语句使用说明(续)
汇编语言中的常量与变量
常量:汇编中允许的常量有整数常量和字符串常量两种。 变量:汇编语言中的变量用来表示存放在内存中操作数,它 的值是可以改变的,变量的值就是操作数在内存中首字节的地 址,变量要事先定义才能使用。对于变量,类型属性说明变量在 内存中占多少个字节,其属性有BYTE(字节)、WORD(字)、 DOUBLE WORD(双字)3种。
☆ 变量定义伪指令
初值表给出变量的初始化值,有多个值时用逗号分隔。 初始化值可以是数值常数,也可以是表达式、?,还可以 由$、重复操作符DUP组成。其中: ?表示未赋初值; $ 表示将要分配的内存单元的偏移地址; DUP表示重复初值。 格式为:重复次数 DUP(重复参数) 说明:重复参数可以是多个,之间用逗号间隔。 举例:2 DUP(1,2) ;等价于1,2,1,2
☆ 常量--整数常量
字符串常量是由单引号或双引号括起来的单个字符或多个字符构成的。汇编程序把引号中的字符翻译成它的ASCII码值。如:‘A’(等于41H)、‘BC’(等于4243H)、“HELLO”等。
☆ 常量—字符串常量
汇编语言中的运算符与表达式
运算符:汇编中的运算符分为6大类,它们是:算术运算符、 移位运算符、逻辑运算符、关系运算符、分析运算符、合成运算 符(见课本P131表5-1)。 表达式:表达式是常数、寄存器、标号、变量与一些运算 符和操作码相组合的序列。 表达式的运算不由CPU完成,而是在程序汇编过程中进行 计算确定,并将表达式的结果作为操作数参与指令所规定的操 作。 当各种运算符同时出现在同一表达式中时,按照运算符的 优先级进行计算,对于优先级相同的运算符,按照从左到右的 顺序进行计算(见课本P132表5-2)。
汇编语句使用说明(续)
汇编语言中的常量与变量
常量:汇编中允许的常量有整数常量和字符串常量两种。 变量:汇编语言中的变量用来表示存放在内存中操作数,它 的值是可以改变的,变量的值就是操作数在内存中首字节的地 址,变量要事先定义才能使用。对于变量,类型属性说明变量在 内存中占多少个字节,其属性有BYTE(字节)、WORD(字)、 DOUBLE WORD(双字)3种。
☆ 变量定义伪指令
初值表给出变量的初始化值,有多个值时用逗号分隔。 初始化值可以是数值常数,也可以是表达式、?,还可以 由$、重复操作符DUP组成。其中: ?表示未赋初值; $ 表示将要分配的内存单元的偏移地址; DUP表示重复初值。 格式为:重复次数 DUP(重复参数) 说明:重复参数可以是多个,之间用逗号间隔。 举例:2 DUP(1,2) ;等价于1,2,1,2
☆ 常量--整数常量
字符串常量是由单引号或双引号括起来的单个字符或多个字符构成的。汇编程序把引号中的字符翻译成它的ASCII码值。如:‘A’(等于41H)、‘BC’(等于4243H)、“HELLO”等。
☆ 常量—字符串常量
汇编语言中的运算符与表达式
运算符:汇编中的运算符分为6大类,它们是:算术运算符、 移位运算符、逻辑运算符、关系运算符、分析运算符、合成运算 符(见课本P131表5-1)。 表达式:表达式是常数、寄存器、标号、变量与一些运算 符和操作码相组合的序列。 表达式的运算不由CPU完成,而是在程序汇编过程中进行 计算确定,并将表达式的结果作为操作数参与指令所规定的操 作。 当各种运算符同时出现在同一表达式中时,按照运算符的 优先级进行计算,对于优先级相同的运算符,按照从左到右的 顺序进行计算(见课本P132表5-2)。
微机原理第五章:汇编语言程序设计.ppt
5.1.2 汇编语言程序的语法规则
一、汇编语言语基本语法(词法)
5.程序结构 ★ 汇编语言源程序的结构是段式结构。 ★ 一个源程序最多有 四种段:
即:代码段、数据段、堆栈段、扩展段。 ★ 每种段在源程序中的先后顺序(位置)可任意。但个数不受限。 ★ 每个段必须有段名。 ★ 指令语句必须安排在代码段中,代码段中可以定义过程。
否则就会出错。
5.1.2 汇编语言程序的语法规则
一、汇编语言语基本语法(词法)
基本元素
字符 词法规则 单词 句法规则 语句 结构规则 源程序
操作符 助记符 标识符等
指示性语句 指令性语句
完成某种 功能的
用户软件
★ 汇编语言源程序是汇编语言语句的有序集合; ★ 语句是由一个具有独立定义的单词按一定的句法组合而成; ★ 而单词是语言的基本元素——字符按一定的词法规则构成。
☆ 名字和标号一样,都是符号地址,反映所属对象的逻辑地址EA; ☆ 不同的伪指令,其名字的叫法也不同:
● 变量名:所定义的存储单元在数据段中的地址。 ● 段名:表示相应段的段首地址(段基址)。 ● 过程名:表示相应子程序在代码段中的起始地址。
5.1.2 汇编语言程序的语法规则
★ 标号和名字一经定义,便具有以下三种属性值: (1)段值:所属段的段基址。 (2)偏移值:在段内的偏地址。 (3)类型值: 标号、过程名具有 NEAR 和 FAR 类型。 变量名的类型有:BYTE,WORD,DWORD。
第五章 汇编语言程序设计
内容摘要:
★ 从汇编语言程序的基本概念出发,介绍汇编语言语法规则、汇 编语言程序段结构、伪指令、上机操作环境等基础知识。
★ 通过对程序的基本结构 —— 顺序、分支、循环、子程序结构 的介绍,举例讨论其程序设计方法和技巧。
微机接口ppt课件第5章 汇编语言程序设计
(1)标号和名字
标号可作为指令语句的符号地址,用来代表 该指令语句在存储器中的地址。
伪指令语句中的名字可以是变量名、段名、 过程名、符号名等,用来代表它们在存储器 中的地址。
指令语句中的标号后面有冒号,而伪指令语 句中的名字后面是空格。
(2)助记符
助记符是汇编语句中必不可少的部分。 指令助记符规定了指令语句的操作类型, 伪指令助记符规定了伪指令语句的伪操作功
能。
(3)操作数
操作数可以是寄存器、存储器、常数、变量、 标号和表达式。
指令语句的操作数可能是一个、两个或没有, 它们之间用逗号分隔。
伪指令语句的操作数根据伪操作命令的不同 而不同,有的伪指令不允许有操作数,有的 伪指令允许带多个操作数。
(4)注释
以分号开头,直到行尾结束,用来对语句或 程序的功能加以说明,增加程序的可读性。
格式:OFFSET 变量或标号 功能:返回变量或标号的偏移地址。 例如,
5.2.1 汇编语言概述
由于计算机只能识别和执行由二进制代码 组成的机器指令,而这种二进制机器语言 人很难理解
于是人们采用字母、符号等来表示机器指 令的二进制代码,这就是汇编语言。
汇编语言又称为符号语言。
5.2.2 汇编语言中的助记符
三种助记符 1.指令助记符 2.伪指令助记符 3.其他助记符
由伪指令助记符构成的语句称为伪指令语句, 又称指示性语句。
3.其他助记符
在汇编语言中,还有另一些常见的助记符, 如标号、常量、变量和表达式等,这些助记 符是可以由用户自己定义的。
关于这些助记符的相关概念我们将在后面的 内容中作详细介绍。
5.2.3 汇编语言的语句格式
汇编语言的语句有指令语句和伪指令语句两种。 指令语句的格式为: [标号:]指令助记符 [操作数,操作数][;注释] 伪指令语句的格式为: [名字]伪指令助记符[操作数,…,操作数][;注释]
精品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
第五章 汇编语言程序设计.ppt
位运算符:>>(位右移),<<(位左移), ~(位非),| (位或) , & (位与), ∧ (位异或) 赋值运算符:= 作为被赋值对象,一般是用VARIABLE伪 指令定义的变量. 复合赋值运算符:+=,-=,*=,/=, <<=,>>=,&=,|=, ∧ =, 复合赋值运算符是执行相应的运算功能, 再执行赋值功能.其中执行运算功能时,被 赋值对象也参与.
则汇编后上述源代码被替换成:
EQU 0x19 . . . MOV Freg,W XORWF 10 BTFSC STATUS,Z GOTO Continue . . . Continue MOVLW 2 Freg
. . .
0x19单元的内容不等于10H时,执行
在上述替换过程中,实参和形参的对应关系 如下: 实参 Freg 10 Continue
伪指令就是"假"指令的意思,它不是单 片机指令系统中的真实指令,其格式也由4部 分组成,每部分之间至少要有一个空格分隔. 符号名 伪指令助记符 操作数 ;注释 其中的符号名通常是代表专用寄存器名, 通用寄存器变量,常数名,标志位或控制位名, 复位矢量或中断矢量的一个字符串.对符号名 的要求类似于前面标号的要求,从一行中的第 一列开始,不能单独一行. 伪指令是程序设计人员向汇编器发出的
(7)MACRO~ EXITM ~ ENDM 宏定义伪指 令 格式:宏名 MACRO 参数表 <程序段> ENDM 说明:宏是一可被调用的指令序列.MACRO 表示宏定义的开始,ENDM用于通知 MPASM汇编程序结束宏定义.定义后的宏 可以在源程序中用宏名调用,通过宏调用可 以把定义过的宏指令序列源程序代码插入到 源程序中.在一个宏定义程序中可以调用另
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序流程图是通过使用各种形状的框,用 来表示各种不同的操作,框内文字由人们 根据操作的需要指定,应当是明确而无 “歧义性”的。带箭头的流程线,用来表 示操作的顺序,即指向下一步的操作,用 流程图表示算法形象直观、流向清楚。 程序流程图潜在的缺点:允许流程线向任 意方向转移,这可能出现“乱麻式”流程, 有时使人难以看懂其来龙去脉(可用N-S结 构化流程图)。
例、内存单元中有一数 X(8位无符号),按下式计 算Y值,并将Y值存于X后面的单元
3X+100 Y= X2-5X+20 X<50 X≧50
DATA X Y DATA
SEGMENT DB 42H DW ? ENDS
CODE
SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X MOV AH,0 CMP AX,50 JNB LOP1 MOV BX,AX MUL BX
例 1 、从端口地址为 PORT1 的输入端口输入数值, 与预定值相比,将差额的绝对值反馈给控制端口 PORT2 DATA SEGMENT A DB 50H ;设预定值 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA GO: MOV AX,DATA MOV DS,AX
CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX, OFFSET TAB MOV SI, OFFSET X MOV AH,1 INT 21H AND AL,0FH MOV [SI],AL
ADD AL,AL MOV AH,0 ADD BX,AX MOV AX,[BX] MOV [SI+1],AX MOV AH,4CH INT 21H CODE ENDS END START 问题:可否直接查表指令?为什么?
DATA CODE
ENDS SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H A1 : CMP AL,‘5’ JNE B1 INC A JMP NEXT
B1 :
C1 :
CMP JNE INC JMP CMP JNE INC JMP
MOV IN CMP JG XCHG LB1: SUB OUT CODE ENDS END
BL,A AL,PORT1 AL,BL LB1 AL,BL AL,BL PORT2,AL GO
问题一:求差的绝对值还有其他方法吗?
解答: 一、先减,为正即为绝对值,为负,需求补。
2、双分支结构
条件成立跳转执行第 2 个 分支语句体,否则顺序执 行第1个分支语句体 注意:第 1 个分支体后一 定要有一个JMP指令跳到 第2个分支体后 问题:分支程序中最需要 注意的指令是哪一条? JMP指令
3、多分支结构
多分支结构是多个条件 对应各自的分支语句体, AH=0 哪个条件成立就转入相 应分支体执行
N AH=1
Y
fuction0
Y
fuction1
N
AH=2 N Y fuction2
例、将某班同学的成绩按优、良、中、及格、不及 格分类统计人数。 设 A:优(5) B:良(4) C:中(3) D:及格(2) E:不及格(1) DATA SEGMENT A DB 0 B DB 0 C DB 0 D DB 0 E DB 0
二、顺序结构程序设计及实例
没有分支、循环等转移指令的程序,会按 指令书写的前后顺利依次执行,这就是顺 序程序 顺序结构是最基本的程序结构 完全采用顺序结构编写的程序并不多见
例1、将内存单元DAT1中的组合BCD码变换成两个 非组合BCD码,存于其后面的两个单元。 DATA SEGMENT DAT1 76 DAT1 DB 76H,2 DUP(?) DAT1+1 06 DATA ENDS DAT1+2 07 CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET DAT1
第5章
汇编语言程序设计
一、程序设计基本步骤 分析问题,明确要求。 建立数学模型。 确定算法。 画程序流程图。 编写程序。 上机调试。
1、算法(Algorithm)
算法是对特定问题求解步骤的一种描述,是指令 的有限序列。每一条指令表示一个或多个操作。
(1) 有穷性。一个算法必须在有穷步之后结束,即必须在有 限时间内完成。 (2) 确定性。算法的每一步必须有确切的定义。算法的执行 对应着的相同的输人仅有惟一的一条路径。 (3) 可行性。算法中的每一步都可以通过已经实现的基本运 算的有限次执行得以实现。 (4) 输入。一个算法具有零个或多个输人,这些输人取自特 定的数据对象集合。 (5) 输出。一个算法具有一个或多个输出,这些输出同输人 之间存在某种特定的关系。
CODE
SEGMENT ASSUME CS:CODE, DS: DATA START: MOV AX , DATA MOV DS, AX MOV ES, AX LEA SI, DA1 LEA DI, DA2 LEA BX, DA3 MOV CX, 20
GO1:
LODS B TEST AL,80H JNZ NEG1 STOSB JMP NEXT NEG1: XCHG BX, DI STOSB XCHG BX,DI NEXT: LOOP GO1
CODE
SEGMENT ASSUME CS:CODE, DS : DATA BEGIN: MOV AX,DATA MOV DS,AX LEA BX,DA1; LEA DI,DA2; MOV CX,10; XOR AX,AX;
LP1:
ADD AL,[BX] ; JNC M1 ; INC AH ; M1: INC BX ; LOOP LP1 ; MOV BL, 10 ; DIV BL ; MOV [DI], AL CODE ENDS END BEGIN
循环程序结构是满足一定条件的情况下, 重复执行某段程序 循环结构的程序通常有3个部分:
循环初始部分——为开始循环准备必要的条件, 如循环次数、循环体需要的数值等 循环体部分——指重复执行的程序部分,其中 包括对循环条件等的修改程序段 循环控制部分 —— 判断循环条件是否成立,决 定是否继续循环
循环控制
控制条件
计数控制循环 条件控制循环
N
结束
1、 计数控制循环
计数控制循环利用循环次数 作为控制条件 易于采用循环指令 LOOP 和 JCXZ实现
初始化:将循环次数或最大循 环次数置入CX 循环体 循 环 控 制 : 用 LOOP 指 令 对 CX减1、并判断是否为0
例 1、数据块是带符号的 8位二进制数,要求 把其中的正负数分开,分别存在其后的存 储区中。 DATA SEGMENT DA1 DB 25H, BDH, 7FH,94H,65H,…,A5H DA2 DB 20DUP(?) ; 正数 DA3 DB 20DUP(?) ; 负数 DATA ENDS
AL,‘4’ C1 B NEXT AL,‘3’ D1 C NEXT
CMP AL,‘2’ JNE E1 INC D JMP NEXT E1 : CMP AL,‘1’ JNE NEXT INC E NEXT: MOV AH,4CH INT 21H CODE ENDS END BEGIN D1 :
编写分支程序要注意的问题 1、条件转移语句的转移范围在 -128~+127字 节之间,若超出此范围要和无条件转移语 句联合使用 例 JA LOP1 … LOP1: JMP LOP2 … LOP2: …
2、分支程序编写时要注意每个分支的出口位 置,如果程序复杂,要画流程图或N-S结构 化流程图 3、利用间接转移的方式,可以实现动态转移 如:SW DW LM0,LM1,LM2,…….,LMn 在:CODE中可使用以下语句 MOV SI, N ;N为n的2倍 JMP [SW+SI]
三、循环程序设计
问题一: 注意高8位的处理? 问题二:如是BCD码如何处理?
个数等于10 xor ax, ax lp1: add al, [bx] daa adc ah,0 inc bx loop lp1
mov cl , 4 shr ax , cl mov [di] , al
个数大于10 ,求累加和 xor ax, ax lp1: add al, [bx] daa xchg al,ah adc al,0 daa xchg al,ah inc bx loop lp1
3、基本程序结构
顺序结构 也就是顺序执行结构,它是最 基本、最常用的结构。所谓顺序执行,就 是按照程序语句行的自然顺序,一条语句 按一条语句地执行程序。 选择结构 包括简单选择和多分支选择结 构,这种结构可以根据设定的条件,控制 语句流程,有选择地执行不同的语句序列。 重复结构 是用于在某些程序中,常常需 要重复使用某一段相同的或类似的程序段, 利用重复结构可简化大量的程序行。
三、分支程序设计及实例
分支程序根据条件是真或假决定执行与否 判断的条件是各种指令,如CMP、TEST等 执行后形成的状态标志 转移指令Jcc和JMP可以实现分支控制 分支结构有
单分支结构 双分支结构 多分支结构
1、单分支结构
条件成立跳转,否 则顺序执行分支语 句体 注意选择正确的条 件转移指令和转移 目标地址
一
DAT1 DAT1+1 DAT1+2
二
三
06 08 86
DAT1 DAT1+1 DAT1+2
54 34 35
DAT1 DAT1+1 DAT1+2
32 35 52
例 2 、从键盘中键入 0~9 中的任意自然数 X,求其立 方值。利用查表法,构建 0~9 的立方表,字节变 量 X 存放键入的自然数,其立方值存于下面的单 元。 DATA SEGMENT TAB DW 0H,1H,8H,27H,64H,125H, DW 216H, 343H,512H,729H X DB ? XXX DW ? DATA ENDS