汇编语言第5章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明:本指令还可继续划分成以下四种情况: (1) 检测某一标志位的条件转移指令如表5-1所示。 表5-1 检测某一标志位的条件转移指令
指令格式 JZ/JE LABEL JNZ/JNE LABEL JC LABEL JNC LABEL JO LABEL JNO LABEL
JS LABEL JNS LABEL JP/JPE LABEL JNP/JPO LABEL
1*,2,3,4*,5,6*,7,8*,9,10*,… 这样划去的都是合数,而右边剩下的就可能是素数。
从2起,往数串右边看,首先遇到的是素数3。 (4) 再从当前素数3起,划去数串右边所有3的倍数的数
(3本身除外),即 1*,2,3,4*,5,6*,7,8*,9*,10*,11,… 这样划去的都是合数。再从3起往右边看,首先遇到的
复习提问
1、请说出六个状态标志位的名称 2、DB、DW、DD的功能是什么 3、结束程序返回DOS的有哪些方法 4、ASSUME语句的功能 5、分析操作符有哪些? 6、各段寄存器的值如何装入?
第5章 基本结构程序设计
5.1 程序设计的一般过程 5.2 顺序结构程序设计 5.3 分支程序设计 5.4 循环程序设计 5.5 字符处理
基本结构程序设计51程序设计的一般过程52顺序结构程序设计53分支程序设计54循环程序设计55字符处理51程序设计的一般过程511程序与程序设计的概念要用计算机解决问题必须事先对所要解决的问题拟定一个便于计算机工作的明确步骤并且用计算机所能理解的语言把它表示出来输入计算机经过调试正确并最后运行取得结果后才算完成了任务我们称这一过程为程序设计
8.运行/维护 已交付的软件投入正式使用,便进入运行阶段,这一阶段
可能持续若干年甚至几十年。软件在运行中可能由于多方面的 原因,需要对它进行修改。其原因可能有:运行中发现了软件 中的错误需要修正;为了适应变化了的软件工作环境,需做适 当变更;为了增强软件的功能需做变更等。
2
汇编语言基本的程序结构有:
拟定一个便于计算机工作的明确步骤称为算法设计(或称设计问 题求解的方法)。
程序设计与编制程序是有区别的。程序设计除了包括编码外, 还有其他过程,如算法设计,程序测试等。
5.1.2 算法与流程图 1.算法 在编制程序之前,必须设计算法。算法是求解问题的
方法和具体步骤,即把所要解决的问题表达为一系列计算 1) 用自然语言描述算 例如:任意给定一个正整数N,求出一切不超过N的素数。 如果用筛选法来解决这一问题,则求解的步骤可概述如下:
5.1.4 程序设计的一般过程
程序设计包含了多方面的工作,尤其是解决大型复杂问题 更是如此。程序设计一般要经历以下几个阶段。
1.定义问题 这个阶段也称为要求定义分析,或称需求分析,即对要解 决问题的意义和要求,了解明白准确。这包括制定一系列清晰 而无二义性的规格说明。 2.构造解法概要 这个阶段也称为功能设计,主要是制定整个解法的概要, 即总体设计。这包括将整个问题分解成若干任务或子任务(可按 功能划分任务),以及它们之间相互关系的描述。可采用功能模 块分割法、逐步求精法等。
(3) 段内间接转移。 格式: JMP reg/mem
例: JMP BX 说明:转移的偏移量在寄存器/存储器中。
(4) 段间直接转移。
格式: JMP FAR PTR LABEL
例: JMP FAR PRT NEXT
说明:LABEL为转移后目的地址的标号,转移后的地址与 指令所在的地址不在同一个代码段中,因此CS和IP均需改变。
2.条件转移指令(短转移)
条件转移指令比较多,它以某些标志位的逻辑运 算作为依据,若满足指令所规定的条件,则程序执行 转移,否则顺序执行。在这类指令中,转向的目的地 址必须在转移指令的-128列或+127个字节之间,这些 指令对标志位无影响,指令的助记符也不惟一。
格式: JCC LABEL
功能: 如果满足判断条件CC则转移到标号 LABEL处,否则继续执行下一条指令。
(2)汇编语言:与机器语言相比,它易读、易写,可以 减轻人们的劳动。然而机器并不能直接理解汇编语言,因 此必须要有一个翻译程序将汇编语言程序翻译成机器语言 程序。
(3)高级程序设计语言:如JAVA、Visual C++等。使用 这类高级语言编写的程序,同汇编语言程序一样,也必须 经过相应语言的“编译程序”的翻译,使之成为机器语言程 序,才能在机器上执行。
就是素数5。 如此继续下去,一直到找出的数(此数不包括在所求素数 中)刚好超过N为止。这时,从该数起,数串左部中没有被 划去的所有数就是所求的不超过N的全部素数。
上述这样一个工作步骤,就是求出一切不超过N的素 数的“算法”。
2)用流程图描述算法
用自然语言,包括一些数学语言的方法来描述算法,对于求 解问题的流程(即逻辑结构)不是很直观,人们理解起来也比较慢。 因此,人们往往利用具有几何图形直观性的流程图(简称框图)方 法来描述算法,即给出问题求解步骤的图形表示,或是用某种 类高级语言(如类PASCAL语言)来描述算法,而流程图是描述算 法最早使用的一种方法。
MOV P2,DX
RET
STR
ENDP
COSEG ENDS
END MULT
;安装数据段地址 ;存结果
5.3 分支程序设计
一般情况下,程序按顺序方式执行,有时也需要机器能根据 不同情况,执行不同的程序或程序段,这就要求所编制的程序具 有判断、选择的能力,即需要分支结构的程序。计算机的分析、 判断能力就是这样实现的。
流程图是框和线(或带箭头的线)的集合体。框用以指示做什 么事,线用以指示各框之间的关系(包括顺序关系)。框具有各种 形状,表示各种不同的用途。
1
开始
初始化设置
从源区取数
变ASCI I码 送存目标区 地I码 程序流程图
5.1.3 程序设计语言与编码 用计算机来求解问题,还必须用计算机所能接受
(5) 段间间接转移。
格式: JMP DWORD PTR mem
例: JMP DWORD PRT [SI]
说明:转移后目的地址在存储器中,因为CS和IP均需改 变,所以需要32位存储器操作数。 例5-3
JMP END ;转移到标号END处,CS不变,IP改变 JMP FAR PTR NEXT
;转移到标号NEXT处,CS改变,IP改变 JMP DWORD PTR [SI] ;将DS∶[SI]开始的32位数据作为转移地址,CS改变,IP改变
5.1 程序设计的一般过程
5.1.1 程序与程序设计的概念 要用计算机解决问题,必须事先对所要解决的问题拟定一个
便于计算机工作的明确步骤,并且用计算机所能理解的“语言”把 它表示出来,输入计算机,经过调试正确,并最后运行取得结果 后才算完成了任务,我们称这一过程为程序设计。
把用计算机语言表示的问题求解的一系列明确步骤,称作解决 该问题的程序,而把完成这项任务的活动称为编码(或称编制程 序,简称编程);
PUSH AX
START CODE
MOV AX,DATA
MOV DS,AX
LEA BX,BUFFER
MOV AX,[BX]
CWD
;扩展为32位
IDIV 2[BX]
;带符号数除法
MOV 4[BX],AX ;存商
MOV 6[BX],DX ;存余数
RET
ENDP
ENDS
END START
00FFH × 00FFH = ?
的语言将问题的算法表示出来,即编码或编程序。 编程序首先碰到的是使用何种语言的问题,这取
决于两个因素: 1.求解问题或任务的性质和要求 2.是所用的计算机配置了什么语言。
(1)机器语言:它是裸机能直接理解的惟一语言。用机器 语言编写程序虽可充分利用机器指令的灵活性,达到较高 的效率,但这种程序是二进制代码形式,难读难写不便修 改,现在已很少使用它。
3.确定算法 这个阶段也称为设计,主要是选择最优算法和数据结构以 实现上述的每一个任务(或子任务),即根据功能模块而选择最 适当的方法和数据结构以实现之。这是程序设计的核心步骤, 也是比较困难的工作。 4.编码 这个阶段也称为程序编制或编程,主要是选择一种程序设 计语言,并用此语言具体地实现所设计的算法。 5.调试与排错 通过调试来排除程序中的错误,保证程序的正确。一般要 作静态检查和动态运行。静态检查包括人工检查和上机进行语 法检查;动态运行就是根据程序在工作中所有可能的情况,例 如,输入各种不同的初始数据,检查程序执行是否正确。
功能:无条件转移到OPRD所指定的位置。
说明:根据目标地址OPRD的位置,本指令还可继续划分
为:段内直接短转移、段内直接转移、段内间接转移、段间直
接转移和段间间接转移五种具体的形式。
(1) 段内直接短转移。 格式: JMP SHORT LABEL 256B
……
JMP SHOR LABEL
例: JMP FH01
转移条件 ZF=1 ZF=0 CF=1 CF=0 OF=1 OF=0 SF=1 SF=0 PF=1 PF=0
指令功能 为0或相等时转移 不为0或不相等时转移 有进位或借位时转移 没有进位或借位时转移
有溢出时转移 没有溢出时转移
1、 顺序程序结构 2、 分支程序结构 3、 循环程序结构 4、子程序调用程序结构 5、中断程序结构
5.2 顺序结构程序设计
例5-1 若内存的数据段中,有缓冲区BUFFER,存取数据
的规则是先存储一个16位带符号的被除数,再存储一个16位带
符号的除数,接着存储商,最后存储余数。
DATA SEGMENT BUFFER DW 812DH DW 013CH DW ? DW ?
;被除数 ;除数 ;存商 ;存余数
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START PROC
FAR
PUSH DS
MOV AX,0
812DH ÷ 013CH = ?
例5-2 编制一个实现两个字(16位)相乘的程序。
MY_DATA SEGMENT M1 DW 00FFH M2 DW 00FFH P1 DW ?
;被乘数 ;乘数 ;存积
P2 DW ?
MY_DATA
ENDS
STACK SEGMENT PARA STACK 'STACK'
STAPN DB 100 DUP(?)
(1) 将不超过N的整数从小到大排成一串,即 1,2,3,4,…,N-1,N
(2) 划去数串最左边的数1(可使用*号标在该数的右上 角),即
1*,2,3,4,…,N-1,N 此时数串留下的最左边的数为2,而2是一个素数,它
是已识别的当前素数。
(3) 从当前素数2起,划去数串右边所有2的倍数的数(2 本身除外),即
分支结构的基本形式如图5-1所示,当分支条件满足时执行 程序段1,不满足时执行程序段2,当程序段2为空时,分支结构 为简单形式。
满足
不满足 条件
程序段1
程序段2
图5-1 分支结构示意图
3
5.3.1 转移指令
转移指令可以改变程序的执行顺序,它分为无条件转移指
令和条件转移指令。
1.无条件转移指令
格式: JMP OPRD
……
说明:LABEL为转移后目的地址的标号,转移后的地址标 号必须在-128~+127之间。(256字节范围内跳)
(2) 段内直接转移。
……
格式: JMP NEAR LABEL 64KB
JMP LABEL
例: JMP NEAR FH02
……
说明:LABEL为转移后目的地址的标号,转移后的地址标 号必须在-32 768 ~ +32 767之间(64 K范围内跳)。此外,一般将 段内直接短转移和段内直接转移合并起来,写为JMP LABEL 的形式,具体属于哪种转移由CPU在执行期间自动判断。
STACK ENDS
COSEG SEGMENT ASSUME CS∶COSEG,DS∶MY_DATA,ES∶MY_DATA
STR PROC FAR MULT: PUSH DS
MOV AX,0
PUSH AX
MOV AX,MY_DATA
MOV DS,AX
MOV ES,AX
MOV AX,M1
MUL M2
MOV P1,AX
6.整理文档 程序设计的结果包括两大部分,一是程序,二是文档。这
里讲的文档主要是包括各个设计阶段的规格说明书,以及用户 使用手册等。这是用户使用、维护程序的依据。
7.软件测试 测试是保证软件质量的重要手段,其主要方式是在设计测
试用例的基础上检验软件的各个组成部分。首先是进行单元测 试,查找各模块在功能和结构上存在的问题并加以纠正。其次 是进行组装测试,将已测试过的模块按一定顺序组装起来。最 后按规定的各项需求,逐项进行有效性测试,决定已开发的软 件是否合格,能否交付用户使用。