汇编程序结构
- 格式:pdf
- 大小:391.55 KB
- 文档页数:34
4.3 汇编语言程序设计的基本方法
——分支程序
这类指令在讲解CMP比较指令时, 结合CMP对两数比较产生的条件(ZF、 SF、CF、OF、PF),已经作了详细的 介绍,这里也只是作一总结。
4.3 汇编语言程序设计的基本方法
——分支程序
条件转移指令的操作助记符种类非常多, 这为各种不同情况下的条件判定提供了方便, 但必须正确合理地使用它们。特别应注意带 符号数与无符号数的区别。下表已经明确指 出了有些指令的判定条件是对带符号数而言 的。例如JB与JL两条指令,它们都可以用来 判定被比较的两个数中的被减数是否小于减 数,但是JB是对无符号数而言的,JL是对带 符号数而言的。
测试标志
CF=1 CF=0 CF∨ZF=1 CF∨ZF=0 SF SF (SF (SF
标号
≮≮
≮ ≮
OF=1 OF=0
OF)∨ZF=1 OF)∨ZF=0
4.3 汇编语言程序设计的基本方法
——分支程序
3.分支程序设计时必须注意下面几个要点 (1)正确选择判定条件和相应的条件转 移指令; (2)在编程时必须保证每条分支都有完 整的结果; (3)在检查和调试时必须逐条分支进行, 因为一条或其中几条分支正确还不足以说明 整个程序正确。
——分支程序
分支程序的结构可以有以下两种形式。 (A)单分支程序结构
(IF-THEN-ELSE结构)
产生条件 Y
判定条件
N P2
P1
4.3 汇编语言程序设计的基本方法
——分支程序
(B)多分支程序结构
(CASE结构)
产生条件
判定条件
P0
P1
……
PN
4.3 汇编语言程序设计的基本方法
——分支程序
2.转移指令
4.3 汇编语言程序设计的基本方法
——循环程序
从程序上说,以上四个部分的分界可 能不是很明确的,有时工作部分与调整部 分可能就是同一段程序,但从功能上说, 以上几个部分都是必需的。
4.3 汇编语言程序设计的基本方法
——循环程序
3.循环控制指令 为了便于循环控制,8086/8088CPU 专门设置了一类循环控制类指令,其指令 书写格式和指令完成的功能如下表所示。
4.3 汇编语言程序设计的基本方法
——分ห้องสมุดไป่ตู้程序
画流程图 下面流程图中指出,只有当数N 为16进制数时,其值在0∽15范围内 时,才对N作相应的转换,否则只给 出标记(0FFH→AL)而不进行转换。
4.3 汇编语言程序设计的基本方法
——分支程序 开始 ( N ) →AL N (AL)≥0 Y (AL)≤9 N (AL)≤15 Y
——循环程序
2.循环程序的组成 不管是哪一种循环结构,一个标准的循 环程序应由以下四部分组成: 初始化准备部分 循环工作部分 参数调整部分 出口判定部分
4.3 汇编语言程序设计的基本方法
——循环程序
初始化准备部分
这是为循环做准备的,它不在循环体内。
循环工作部分
这部分是循环程序解题所需的核心程序, 题目要完成的功能在此进行。根据题目要求不 同,这部分程序可以很简单,也可以很复杂, 甚至是内循环嵌套外循环结构——多重循环程 序。
4.3 汇编语言程序设计的基本方法
——分支程序
4.分支程序设计举例 P113 例 4.3.4 写出将一位十六进制数转换成对应 ASCII码的程序(只考虑大写字母)。(假 定被转换的一位十六进制数在存储器N单元 存放,转换后的结果存到AL中)
4.3 汇编语言程序设计的基本方法
——分支程序
分析题目并提出编程算法
4.3 汇编语言程序设计的基本方法
——循环程序
表中指令的寻址方式均为段内 相对寻址,且为短转移,因而转移 的范围不能超过-128∽+127个字节 。
4.3 汇编语言程序设计的基本方法
——循环程序
4.循环程序设计举例
P121 例4.3.6
求某数中负数的个数。假设数组中的数据 个数均 为8位二进制数,且数组的第一个字 节存放的是该数组中所包含的数据的个数, 第二个字节用来存放结果,即数组中负数的 个数,数组中的第三个字节开始存放数组中 的数据。
4.3 汇编语言程序设计的基本方法
——分支程序
【1】 关于无条件转移指令JMP在讲关 于转移地址的寻址方式时,已经作了 详细的介绍,这里只作一总结。 8086/8088指令系统中的无条件转 移指令JMP的书写格式如下表所示。
4.3 汇编语言程序设计的基本方法
——分支程序 助记符格式 JMP SHORT 标号 JMP NEAR PTR 标号 JMP OPR1 JMP FAR PTR 标号 16位REG 字类型的存储器单元 功能说明 (IP)←(IP)+D8 (IP)←(IP)+D16
我们知道,一位十六进制数由0∽9十个数字符 号和A∽F六个字母符号表示,它们对应的ASCII码 如表4.3.4所示。由表中我们很快可以发现,对于 0∽9十个数字只要将十进制数加30H即可,而A∽F 的六个数字必须加37H才能得到其对应的ASCII码。 所以,对于给定的数N要实现这种转换需经判别后 分别处理。
4.3 汇编语言程序设计的基本方法
——分支程序 指令助记符格式
JB/JNAE,JC JBE/JNA JNBE/JA JL/JNGE JNL/JGE JLE/JNG JNLE/JG OPR OPR OPR OPR OPR OPR OPR JNB/JAE,JNC OPR
条件说明
结果低于/不高于或不等于(无符号) 结果不低于/大于或等于(无符号) 结果低于或等于/不高于(无符号) 结果不低于或不等于/高于(无符号) 小于/不大于或不等于(带符号) 不小于/大于或等于(带符号) 小于或等于/不大于(带符号) 不小于或等于/大于(带符号)
4.3 汇编语言程序设计的基本方法
——循环程序
分析题目,提出编程思想
为了统计数组中负数的个数,需要逐个 判断数组中的每个数据,根据判断结果,将 凡是数据的符号位为1的数据个数累加起来便 是要求的数组中的负数的个数了。 这是一个循环次数已知的循环结构程序, 循环次数就是数组的第一个字节单元内容。
4.3 汇编语言程序设计的基本方法
——循环程序
五.循环程序
1.循环程序的基本结构 循环程序有以下两种结构。 (A)先循环工作,后循环判定 (DO-UNTIL结构)
4.3 汇编语言程序设计的基本方法
——循环程序 开始 初始化准备部分 循环工作部分 循环参数调整部分 N 出口判定 Y 结束 循环判定条件:用CX 作减1计 数控制循环 应用场合:适合于循环次 数已知的情况
4.3 汇编语言程序设计的基本方法
——分支程序
四.分支程序
1.分支程序的结构形式 计算机在完成某种运算或某个过程的控 制时,经常需要根据不同的情况(条件)实 现不同的功能,这就要求在程序的执行过程 中能够进行某种条件的判定,并根据判定结 果决定程序的流向,这就是分支程序。
4.3 汇编语言程序设计的基本方法
4.3 汇编语言程序设计的基本方法
——分支程序 十六进制数 0 1 2 3 4 5 6 7 十六进制数 8 9 A B C D E F ASCII码 30H 31H 32H 33H 34H 35H 36H 37H ASCII码 38H 39H 41H 42H 43H 44H 45H 46H
表4.3.4
4.3 汇编语言程序设计的基本方法
——分支程序 START: MOV AX,DATA MOV DS,AX MOV AX,STACK 可以缺省 MOV SS,AX MOV SP,OFFSET TOP MOV AL,N AND AL,0FH CMP AL,0 JB G1 CMP AL,09 JBE D1 CMP AL,15 JA G1 ADD AL,07 D1: ADD AL,30H JMP SHORT DONE G1: MOV AL,0FFH ;出错标志 DONE: MOV AH,4CH INT 21H CODE ENDS END START
4.3 汇编语言程序设计的基本方法
——循环程序
助记符格式 LOOP 标号 LOOPZ/LOOPE LOOPNZ/LOOPNE JCXZ 标号 标号
功能说明 (CX)←(CX)-1 ,(CX)≠0时, 转到标号处 (CX)←(CX)-1 ,(CX)≠0且 ZF=1时,转到标号处
标号 (CX)←(CX)-1 ,(CX)≠0且 ZF=0时,转到标号处 CX=0时,转到标号处
(IP)←(EA),EA为由OPR1确定的 有效地址
JMP OPR1 双字类型的存储器单元
(IP)←转向地址的偏移地址 (CS)←转向地址的段地址 (IP)← ( EA),EA为由OPR1确定的
有效地址
(CS)←(EA+2)
4.3 汇编语言程序设计的基本方法
——分支程序
【2】条件转移指令
只有当指令中指出的条件满足时才 发生转移,条件判定的依据是标志寄存 器中各位的当前状态。这些标志位的状 态是由其它指令运行时产生的。
Y
(AL)+7→AL (AL)+30H→AL 结束
N 0FFH→(AL)
4.3 汇编语言程序设计的基本方法
——分支程序
编写程序
STACK SEGMENT STACK DW 256 DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT N DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
4.3 汇编语言程序设计的基本方法
——顺序程序
三.顺序程序 顺序程序是指程序中的每一条指令 都是按指令的排列顺序执行的,它是最 简单的一种程序结构。这在程序段中是 大量存在的,但作为完整的程序则很少 见。