文档介绍:第十五讲汇编语言的基本结构(二)
教学目的:
1、掌握循环程序结构
2、了解循环结束判断的两种方法
3、能编写单间的单循环、双循环的程序
教学重点:
单循环程序编制
教学难点:
循环程序的结构构思
教学环节
组织教学:(2分钟)检查学生人数,强调作业要求。
复习提问: 1、循环转移指令DJNZ的功能是怎样的?
2、汇编程序的在三种基本结构是什么?
顺序程序——每条指令只执行一次;
分支程序——根据不同条件,会跳过一些指令,而转去执行另一些指令
共同点:每条指令至多执行一次。但是,实际中有时要求某程序段多次重复执行,需要采用循环结构。
引入新课: §3-8 汇编语言程序的基本结构及应用举例
循环结构不但使程序简练,而且大大节省存储空间。
循环程序包含四部分:
初始化部分
循环处理部分(主体)
循环控制部分(修改地址指针、修改变量、检测循环结束条件)
循环结束部分(对结果分析、处理,存放结果)
循环有:单循环、多重循环。
循环次数已知,可用计数器控制循环次数;
循环次数未知,按问题条件控制循环是否结束。
一、单循环程序
1、循环次数是已知的程序
例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。
先处理,后判断: 先判断,后处理:
结束部分
处理部分
修改变量
初始化部分
开始
结束部分
修改变量
处理部分
初始化部分
开始
解:先将中间单元置成30H,然后判欲转换位是否为1,
若是,则将中间单元内容加1;否则,中间单元内容保持不变。
通过左移指令实现由高到低的顺序进行转换。
ORG 1000H
START:MOV R2,#08H ;循环计数初值(循环次数已知)
MOV R0,#10H ;地址指针初值
MOVX A,***@R0 ;取数
MOV B,A ;暂存B中
LOOP:MOV A,#30H ;将中间单元(A)置成30H
JNB ,NA ;判断转换的二进制位为0否?
;若是转NA
INC A ;若为1,则(A)内容加1,成为
;1的ASCII码“31H”
NA:INC R0 ;修改地址指针
MOVX ***@R0,A ;存放转换的结果
MOV A,B
RL A,B ;作好准备,判断下一位
MOV B,A ;暂存
DJNZ R2,LOOP ;判断转换结束否?未完继续
SJMP $
END
(2)循环次数未知的程序
例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(‘CR’= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。
解:从首单元开始取数,每取一数判断其是否为‘CR’,是则结束。
ORG 1000H
STADA DATA 20H
SLANG DATA 1FH
CMCR2:MOV R0,#STADA-1
MOV B,#0FFH
CRLOP:INC R0
INC B
MOVX A,***@R