分支与循环程序设计
- 格式:doc
- 大小:625.00 KB
- 文档页数:19
第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。
程序调试的方法,常见问题的程序设计方法。
一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。
A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。
A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。
A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。
A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。
A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。
A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。
A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。
A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。
A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。
A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。
常见的程序设计方法在计算机程序设计中,常见的程序设计方法有许多种。
程序设计是将问题转化为计算机可以理解和执行的指令或代码的过程,而不同的问题和需求通常需要使用不同的程序设计方法来解决。
下面将介绍一些常见的程序设计方法。
1. 顺序程序设计顺序程序设计是最基础的程序设计方法之一。
顺序程序设计按照指令的顺序逐步执行,从上到下,从左到右。
开发者需要按照问题的逻辑和需求,将指令按照正确的顺序编写。
这种方法简单明了,适用于一些简单的问题,但对于复杂的问题可能会显得不够灵活。
2. 分支程序设计分支程序设计基于条件语句,根据不同的条件选择不同的执行路径。
常见的条件语句有if语句和switch语句。
开发者可以根据不同的条件,执行不同的代码块,从而实现问题的不同分支。
分支程序设计适用于需要根据条件进行不同操作的问题,可以增加程序的灵活性和适应性。
3. 循环程序设计循环程序设计允许程序根据需要重复执行一段代码块。
循环语句的常见形式有for循环、while循环和do-while循环。
循环程序设计可以逐次迭代一个过程,直到满足退出条件为止。
这种方法适用于需要重复执行相同或类似操作的问题,提高了程序的效率和可重用性。
4. 递归程序设计递归程序设计是指一个函数或过程在执行过程中调用自身的方法。
通过递归,一个复杂的问题可以被拆分为多个相同或类似的子问题,从而简化解决步骤。
递归程序设计适用于问题可以自我分解为更小规模问题的情况,但需要注意递归深度和终止条件以避免无限循环。
5. 面向对象程序设计面向对象程序设计是一种以对象和类为基本单位的程序设计方法。
它将数据和操作这些数据的函数封装成对象,通过对象之间的交互来解决问题。
面向对象程序设计具有抽象、封装、继承和多态等特性,可以更好地模拟和解决现实世界中的问题。
面向对象程序设计适用于复杂的问题,提高了代码的可读性和可维护性。
6. 函数式程序设计函数式程序设计是一种基于数学函数概念的程序设计方法。
目录系统认识 (1)实验一数码转换编程及程序调试 (5)实验二运算类编程实验 (11)实验三分支程序、循环程序设计实验 (16)实验四子程序设计实验 (22)实验五显示程序实验 (26)实验六串行通讯应用实验 (27)附录WMD86 联机软件使用说明 (40)系统认识一、实验目的掌握TD-PITE微机原理与接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
二、实验设备PC微机一台,TD-PITE实验装置一套。
三、实验内容编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。
四、实验步骤1. 运行Wmd86软件,进入Wmd86集成开发环境。
2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1所示。
语言选择后,下次再启动软件,语言环境保持这次的修改不变。
在这里,我们选择汇编语言。
图13. 语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图2所示。
默认文件名为Wmd861。
图24. 编写实验程序,如图3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。
图3程序:SSTACK SEGMENT STACK ;定义堆栈段DW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000H ;建立数据起始地址MOV CX, 16 ;循环次数AA1: MOV [SI], ALINC SI ;地址自加1INC AL ;数据自加1LOOP AA1AA2: JMP AA2CODE ENDSEND START5. 点击,编译文件,若程序编译无误,则输出如图4所示的输出信息,然后再点击进行链接,链接无误输出如图5所示的输出信息。
图4图56. 连接PC与实验系统的通讯电缆,打开实验系统电源。
汇编-循环与分支程序设计循环与分支程序设计----------1.引言在汇编语言中,循环和分支是编写和优化程序中常用的技术。
循环用于重复执行一段代码,而分支用于根据条件跳转到不同的代码段。
本文将介绍如何在汇编语言中实现循环和分支以及如何优化这些代码段。
2.循环程序设计2.1.while循环在汇编语言中,while循环可以使用条件跳转指令(如jmp、jz、jnz等)来实现。
以下是一个简单的while循环的汇编代码示例:.datacount db 10.codemn procmov al, 0loop_start:cmp al, countjge loop_end。
循环内容inc aljmp loop_startloop_end:。
循环结束后的代码2.2.for循环在汇编语言中,for循环可以使用计数器和条件跳转指令来实现。
以下是一个简单的for循环的汇编代码示例:.datacount db 10.codemn procmov al, 0loop_start:cmp al, countjge loop_end。
循环内容inc aljmp loop_startloop_end:。
循环结束后的代码mn endp3.分支程序设计3.1.if语句在汇编语言中,if语句可以通过条件跳转指令来实现。
以下是一个简单的if语句的汇编代码示例:.dataflag db 1.codecmp flag, 1jne else。
if语句的真正内容jmp endifelse:。
else语句的内容endif:。
if语句结束后的代码mn endp3.2.switch语句在汇编语言中,switch语句可以通过多个条件跳转指令来实现。
以下是一个简单的switch语句的汇编代码示例:.datacase db 2.codemn proccmp case, 1je case1cmp case, 2je case2jmp case_defaultcase1:。
实验名称分支及循环程序设计成绩
指导教师******
专业班级****** 姓名白*** 学号*******
联系电话********
一、任务要求
1.熟练掌握Keil环境下汇编语言程序的调试方法,加深对汇编
语言指令、机器码、寻址方式等基本内容的理解,掌握分支程
序和简单程序的设计及调试方法,了解并行IO口的使用。
2.设有8bits符号数X存于外部RAM单元,按以下方式计算后
的结果Y也存于外部RAM单元,请按要求编写完整程序。
3.利用51系列单片机设计一个24小时制电子时钟,电子时钟
的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩
BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停
止计时。
设计1s延时子程序(延时误差小于10us,晶振频
率12MHz)。
4.1)实现4位十进制加、减1计数,千位、百位由P1口输出;
十位、个位由P2口输出。
利用P3.7状态选择加、减计数方
式。
2)利用P3口低四位状态控制开始和停止计数,控制方式自
定。
二、设计思路
1.先在外部RAM取数,然后判断该符号数是否为负数,若为负
数,则取相反数并存数;若为正数,则接着判断该数是否大于
等于64,若满足,则求平方并存数,先存低位,后存高位;
若小于64,则接着判断该数是否大于10,若满足,则求该数
的一半并存数;若小于等于10,则取相反数并存数。
2.第一步先编可以延时1S的子程序DELAY;接着判断P
3.O
是否满足开始计数条件,若不满足,则重复判断;若满足,则
对时分秒分别赋值,调用延时子程序,判断是否满足计时条件,若不满足,则重复判断直至满足;若满足,则秒钟自加一,循
环,判断秒钟循环满60次后出循环,对分钟自加一,然后继
续循环,最后判断分钟循环满60次后出循环,对时钟自加一,然后判断时钟循环满24则回到初值,时分秒重新赋值并重新
开始循环。
3.判断P3.7,若为1,则进行加一计数,若为0,则跳转至另一
程序进行减一计数;加一计数中,先取低位P1送A,自加一,送P1,判断是否有溢出,若有,则取高位P2送A,自加一,送P2,然后回判断循环;减一计数同理,即先取低位P1送A,自减一,送P1,判断是否有进位,若有,则取高位P2送A,自减一,送P2,然后回判断继续循环。
三、资源分配
1.2000H 片外RAM存数
2001H 存结果低八位
2002H 存结果高八位
B寄存器暂存结果高八位
2.P3.0 存计时判断位
R0、R1、R2 存延时子程序中各重循环的循环次数
R3、R4、R5 存时分秒的循环次数
P0、P1、P2 存时分秒的输出值
3.P1、P2 分别存十进制计数的低两位、高两位
P3.7 存计数方式的控制位
四、流程图
1、8 bit符号数的判断及计算
2、时钟设计
3.十进制加减一计数器
五、源代码(含文件头说明、语句行注释)1.8 bit符号数的判断及计算
ORG 0000H
LJMP START
ORG 1000H
START: MOV DPTR,#2000H;地址指针赋初值MOV A,#22
MOVX @DPTR,A
MOVX A,@DPTR;取数
JB ACC.7,DD
CJNE A,#64,AA;若A≠64,则转AA AA: JC BB;若A<64,则转BB
MOV B,A
MUL AB;求A的平方
INC DPTR
MOVX @DPTR,A;存结果低八位
INC DPTR
MOV A,B
MOVX @DPTR,A;存结果高八位
SJMP $
BB: CJNE A,#10,CC;若A≠10,则转CC CPL A
EE: INC DPTR
MOVX @DPTR,A
SJMP $
CC: JC DD;若A<10,则转DD
RR A;若A>10,则右移一位
SJMP EE
DD: CPL A
INC A
SJMP EE
END
2.时钟设计
ORG 0000H
LJMP START
ORG 1000H
START: JB P3.0,START;若为0,则开始计时RESTA: MOV R3,#24
MOV P0,#00H ;时钟赋初值
LOOP3: MOV R4,#60
MOV P1,#00H ;分钟赋初值
LOOP2: MOV R5,#60
MOV P2,#00H ;秒钟赋初值
LOOP1: ACALL DELAY;调用延时1S子程序LOOP: JB P3.0,LOOP;若为1,则停止计时MOV A,P2
ADD A,#01H
DA A
MOV P2,A
DJNZ R5,LOOP1;判断秒钟是否结束循环
MOV A,P1
ADD A,#01H
DA A
MOV P1,A
DJNZ R4,LOOP2;判断分钟是否结束循环
MOV A,P0
ADD A,#01H
DA A
MOV P0,A
DJNZ R3,LOOP3;判断时钟是否结束循环
LJMP RESTA
DELAY: MOV R0,#12
NOP
DELAY3:MOV R1,#130
DELAY2:MOV R2,#212
NOP
NOP
DELAY1:NOP
DJNZ R2,DELAY1
DJNZ R1,DELAY2
DJNZ R0,DELAY3
RET
END
3.十进制加减计数器
ORG 0000H LJMP START
ORG 1000H START:MOV P1,#12H
MOV P2,#92H LOOP: ACALL DELAY
MOV A,P2
JB P3.7,AA;若为1,则转AA实现记数加1
ADD A,#99H
DA A;实现十进制减1
MOV P2,A
JC BB;判断是否产生借位,若产生,则对高位减1
MOV A,P1
ADD A,#99H
DA A
MOV P1,A
AJMP LOOP
AA: ADD A,#01H
DA A;实现十进制加1
MOV P2,A
JNC BB;判断是否产生进位,若产生,则对高位加1 MOV A,P1
ADD A,#01H
DA A
MOV P1,A
BB: AJMP LOOP
DELAY: MOV R0,#12
NOP
DELAY3:MOV R1,#130 DELAY2:MOV R2,#212
NOP
NOP
DELAY1:NOP
DJNZ R2,DELAY1
DJNZ R1,DELAY2
DJNZ R0,DELAY3
RET
END
六、程序测试方法及结果1.8 bit符号数的判断及计算1)令片外RAM中数据为64
2)令片外RAM中数据为22
3)令片外RAM数据为1
4)令片外RAM数据为-2
2.时钟设计
1)令P3.0=0,程序按十进制正常运行
2)令P3.0=0,暂停计数
3)设置断点观察延时子程序的延时时间,刚好为1s
3.十进制加减1计数器
1)将P3.7置1,计数器实现加一计数
2)将P3.7置0,计数器实现减一计数
七、思考题
1.实现多分支结构程序的主要方法有哪些?举例说明。
a)分支地址表法
b)转移指令表法
c)地址偏移量表法
2.在编程上,十进制加1计数器及十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?
a)十进制加1计数器满十进1,十六进制加1计数器满16进1,
十进制加法需用DA A指令进行调整
b)用ADD A,#99H
DA A 指令,即可实现减1计数
其它说明:
1.标题:黑体,小四号
2. 正文:宋体,五号,1.5倍行距
3.流程图使用SmartDraw7 或Visio软件绘制
4.不要加封面。