当前位置:
文档之家› 微机原理PPT第五章 汇编语言程序设计
微机原理PPT第五章 汇编语言程序设计
程序流程图是通过使用各种形状的框,用 来表示各种不同的操作,框内文字由人们 根据操作的需要指定,应当是明确而无 “歧义性”的。带箭头的流程线,用来表 示操作的顺序,即指向下一步的操作,用 流程图表示算法形象直观、流向清楚。 程序流程图潜在的缺点:允许流程线向任 意方向转移,这可能出现“乱麻式”流程, 有时使人难以看懂其来龙去脉(可用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