分支与循环程序设计

合集下载

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第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. 函数式程序设计函数式程序设计是一种基于数学函数概念的程序设计方法。

第5章 汇编语言程序

第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。

结构化程序设计的三种基本结构

结构化程序设计的三种基本结构
第3章 结构化程序设计的三种 基本结构
结构化程序设计共有以下3种基本结构: 顺序结构 分支结构 (选择结构 )
循环结构,
(1)顺序结构,如图3.1(a)所示,该结构先执行A,再 执行B,两者是顺序执行的关系
A B 流程图
A B
N-S结构图
(2)分支结构,也叫选择结构,如图3.1(b)所示, 该结构先判断条件是否成立,当条件成立时执 行A,否则执行B。该结构只能执行A或B其中之 一
例如: m和n是整形变量,则: scanf (“%d%d”,m,n );是错误的, 应将“m,n”改为“&m,&n” 。
②如果在“格式控制串”中除了格式标识符、修饰符和格式 说明符以外还有其他字符,则应在输入数据时输入与这些字 符相同的字符。例如: scanf ("%d,%d",&m,&n );
输入时两个整数之间应加入“,”: 234,123↙ 因为,在scanf函数中的“格式控制串”中使用了逗号分 隔,所以必须在234后面加一个逗号。
表3.2 scanf函数常用的格式说明符
格式说明符 d o x c s f
功能说明 表示输入带符号的十进制整数 表示输入无符号八进制整数 表示输入十六进制无符号整数 表示输入单个字符 表示输入多个字符,即一个字符串 表示输入实数,可以用小数形式输入
表3.2 scanf函数常用③从键盘输入的数据类型和个数必须与参数表中的数 据类型和个数相匹配。例如:
scanf (“%d,%d”,&m,&n ); 输入数据时的形式:
234,10.5↙ (错误,因为数据类型不匹配) 234,105,123↙ (错误,因为数据个数不匹配) 234,123↙ (正确) ④可以指定输入数据所占的列数,系统自动按指定列 数截取数据。例如:

程序设计3(3种基本结构)

程序设计3(3种基本结构)

流程图:
3.2.5 条件运算符(了解即可) 若if语句中,在表达式为“真”和“假”时,且都 只执行一个赋值语句给同一个变量赋值时,可以用 简单的条件运算符来处理。例如,若有以下if语句: if (a>b) max=a; else max=b; 可以用下面的条件运算符来处理: max=(a>b)?a∶b; 其中“(a>b)?a∶b”是一个“条件表达式”。它是 这样执行的:如果(a>b)条件为真,则条件表达式 取值a,否则取值b。
3.3.5 示例:

4பைடு நூலகம்
1
1 3 1 5 1 7
例:多项式如下:π/4 =1 - 1/3 + 1/5 - 1/7 + 1/9 ... 计算的项数n由键盘输入,求π。结果保留2位小数。 #include <iomanip> int main(){ int n, sign=1; double sum=0.0; cin>>n; for(int i=1; i<=n; i+=2) { sum = sum + sign*1.0/i; sign = -sign; } // 设置浮点数的小数个数2位 cout<<fixed<<setprecision(2)<<4*sum<<endl; return 0; }
3.3.3 for
for语句使用最为灵活,不仅可以用于循 环次数已经确定的情况,而且可以用于循环 次数不确定而只给出循环结束条件的情况, 它完全可以代替while语句。一般形式为: for(表达式1;表达式2;表达式3) 语句
它的执行过程如下: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真, 则执行for语句中指定的内嵌语句, 然后执行下面第(3)步。若为假, 则结束循环。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执 行。

汇编-循环与分支程序设计

汇编-循环与分支程序设计

方法A
MOV DL,0DH MOV AH,06H INT 21H MOV DL,0AH MOV AH,06H INT 21H
方法B
MOV DL,0AH MOV AH,06H INT 21H MOV DL,0DH MOV AH,06H INT 21H
记住以下ASCII值
退格:08H(即8) 空格:20H(即32) 换行:0AH(即10) 回车:0DH(即13) 0 :30H(即48) a :61H(即97) A :41H(即65)
程序流程图
开始
DX=A
DX=A+B BX=DX DX左移3位 BX左移1位
DX=BX+DX-500
结束
编写程序
DATA BUFA BUFB RESULT
SEGMENT DW ? DW ? DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CODE
➢ 循环控制部分:判断循环条件满足与否,常用方法:计数控制、特 征值控制、地址边界控制等。
➢ 常用指令
[1].LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE;
[2].各种跳转指令;
特别要注意循环入口和循环次数的正确设置、地址指针及循环控
制条件的修改等。否则会得不到期望的结果。
➢ 多重循环程序设计循环嵌套
INT 21H
不回显在屏幕上
2.键盘一次输入一个字符串的方法:
串地➢址例存如入(,DS在:D数X)据、调区用定参义数的为字10送符A缓H冲区如下:
MOV MOV MOV MOV MOV
DABADDAXuHSX,f,,,TfASAO0eEXfArGf,Hsc/eSASBo/tBEuu设TCufnGRf置BftTMfueILeNIr/frENE/fGT/设e/NN/r/置BTB/2uu/1存ffBHDffDuD功入eefBBBrrf能字是的er参符存段的33?数串放地偏22 为的输址移D0最入U存地APH大字入址(长符D存S?度串入)并的DX存缓入冲B区uffer的首字节;

第四章 循环结构程序设计

第四章 循环结构程序设计

while(i<=100)
{ i++;
程序运行结果: sum=5050
sum=sum+i;
}
6
4.3 do-while语句
do-while语句的结构 do 语句 while(表达式);
例如: do
x-=1; while(x>0);
功能:
1)执行“语句”。 2)计算“表达式”的值。如果值为非0,转1);否则转3)。
}
8
4.3 do-while语句
1)循环体如果包含一个以上的语句,要用复合语句表示。 2)在循环体中应有使循环趋于结束的语句。 3)while语句的特点是先执行循环体,然后判断表达式的值。 4)一般情况下,用while语句和用do-while语句处理同一 个问题时,若二者的循环体部分一样,其结果也一样。但如
18
4.7 goto语句以及用goto语句构成循环结构
goto语句的一般格式:
goto 语句标号;
例如: goto loop;
功能:程序执行到goto语句时,将程序流程转到语句标号指定的 语句去执行。
有标号的语句的格式:
语句标号: 语句
例如: loop: sum=sum+i;
19
4.7 goto语句以及用goto语句构成循环结构
【例4-9】用goto语句实现求1~100累加和。
#include <stdio.h>
main() { int n=1, sum=0; loop: sum += n; n++;
if(n<=100) goto loop;
printf("sum=%d\n",sum); }

第五章 循环与分支程序设计

第五章 循环与分支程序设计
12
continue: add loop mov loop ……
2. 分支程序设计
? ? … case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1) 逻辑尺控制 (2) 条件控制
IF-THEN-ELSE 结构
(3) 地址跳跃表(值与地址有对应关系的表) 地址跳跃表(值与地址有对应关系的表)
13
x(x1,x2,…… x2,……,x10) 例:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10), (z1,z2,…… z2,……,z10) 编程计算 z(z1,z2,……,z10) z1 = x1 z2 = x2 z3 = x3 z4 = x4 z5 = x5 z6 = x6 z7 = x7 z8 = x8 z9 = x9 + y1 + y2 - y3 - y4 - y5 + y6 - y7 - y8 + y9
3
1. 循环程序设计
初始化
初始化
N N
控制条件
Y
循环体 控制条件
Y
循环体
DO-WHILE 结构
DO-UNTIL 结构
4
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
5
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1
2 3
4je lea L: shr jnb jmp add1: add jmp continue: …… routine1: …… routine2: …… al, 0
(寄存器间接寻址) 寄存器间接寻址)
continue bx, branch_table ;逻辑右移 al, 1 逻辑右移 ;jnb=jnc add1 ;段内间接转移 word ptr[bx] bx, type branch_table L

汇编语言程序设计2

汇编语言程序设计2

目录系统认识 (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.熟悉8086指令系统的数据传送指令及8086的寻址方式。

2.利用TurboDebugger调试工具来调试汇编语言程序。

实验任务:1.通过下述程序段的输入和执行来熟悉TurboDebugger的使用,并通过显示器屏幕观察程序的执行情况。

练习程序段如下:MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOVDS:[0020H],BX2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。

压栈程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX出栈程序段请自行编写(用不同的出栈顺序)。

3.指出下列指令的错误并加以改正,上机验证之。

(1)MOV[BX],[SI](2)MOVAH,BX(3)MOVAX,[SI][DI](4)MOVBYTEPTR[BX],2000H(5)MOVCS,AX(6)MOVDS,2000H4.设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。

(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[0120H](4)MOVAX,[BX](5)MOVAX,0110H[BX](6)MOVAX,[BX][SI](7)MOVAX,0110H[BX][SI]5.将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。

试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。

第六章循环和分支程序

第六章循环和分支程序
当两个带符号数相比较时,当A<B时,转移到目标地址。
2)JGE/JNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移) 两个带符号数相比较时,若A≥B,转移到目标地址
25
2、判断带符号数的大小的条件转移指令
3)JL/JNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移)
即 将双字存储变量第二个字作为段地址, 第一个字为偏移地址处继续执行。
20
5、 段间直接转移 格式: JMP 标号 例如:
;标号为FAR属性
CODE1 SEGMENT ∶
JMP CODE2_NEXT

CODE1 ENDS
CODE2 SEGMENT

CODE2_NEXT LABEL FAR

CODE2 ENDS
5 8/8/2019
2、LOOPE/LOOPZ(如果相等/如果为0则循环) 格式:LOOPE/LOOPZ 短距离标号 功能:该指令将 CX减 1,若 CX不为 0且ZF置1 (即CX≠0且运算结果为0),则将控制转移到 目标操作数,否则: 顺序执行LOOPE/LOOPZ指令之后的指令。
6 8/8/2019
如果一个标号能被其他段中的JMP指令(或CALL) 来访问,那么需要将这个标号的距离定义为FAR。
15 8/8/2019
1、定义距离属性为NEAR的标号
1)隐式说明:即在标号后面加上冒号,放在指令的前面。 例如:L1: MOV AX,[SI] NEXT: MOC AX,BX
L1和NEXT都是标号名,它们的距离属性均为NEAR。

C语言第6章循环结构程序设计

C语言第6章循环结构程序设计

第6章循环控制本章要求:1、初步熟悉用计算机解决问题的思路。

2、掌握while、do-while、for语句的特点和使用方法。

3、掌握break、continue语句的用法。

4、熟悉一些常见问题的算法及其C语言实现。

§6.1 概述循环:反复执行称为“循环体”的程序段。

循环控制常用于数学迭代、对象遍历等问题的求解,几乎所有实用程序都包含循环。

特别是在现代多媒体处理程序(图像、声音、通讯)中,循环更是必不可少。

Intel公司为了加快循环程序的执行,在CPU硬件中加入多媒体扩展指令MMX(Multi-Media-eXtension );AMD在CPU中加入3D Now!指令。

循环结构是结构化程序三种基本结构之一。

(顺序结构、分支结构)。

根据开始循环的初始条件和结束循环的条件不同,C语言中用如下语句实现循环1、用goto语句和if语句构成循环。

2、用while语句。

3、用do-while语句。

4、用for语句。

§6.2 goto语句一般形式:goto 语句标号作用:无条件转向“语句标号”处执行。

“语句标号”是一个标识符,它表示程序指令的地址。

goto语句不符合结构化程序设计准则,因为无条件转向使程序结构无规律、可读性差。

一般应避免使用goto语句,但如果能大大提高程序的执行效率,也可以使用。

[例6.1] 用if语句和goto语句构成循环,求。

main(){int i,sum=0;i = 1;loop:if (i <= 100){ sum = sum + i;i++;goto loop;}printf("%d",sum);}§6.3 while语句一般形式:while(表达式) 语句作用:实现“当型”循环。

当“表达式”非0(真)时,执行“语句”。

“语句”是被循环执行的程序,称为“循环体”。

特点:先判“表达式(条件)”。

[例6.2]main(){int i,sum=0;i = 1;whie (i <= 100){sum = sum + i;i++;}printf("%d",sum);}注意:1、注意给出循环的初始条件,如本例中“sum=0、i=1”。

分支与循环程序设计

分支与循环程序设计

分支与循环程序设计一、分支程序设计分支程序设计是指根据条件的不同,执行不同的代码块。

在程序中,我们经常需要根据一定条件来选择执行不同的操作,这就需要使用分支结构来实现。

常见的分支结构有if语句和switch语句。

1. if语句:if语句是最基本也是最常用的分支结构之一、它的语法形式如下:```if (条件表达式)//如果条件为真,执行这里的代码块} else//如果条件为假,执行这里的代码块```if语句的条件表达式可以是逻辑表达式、比较表达式或其他具有确定值的表达式。

当条件表达式为真时,执行if后面的代码块;当条件表达式为假时,执行else后面的代码块。

2. switch语句:switch语句是一种多分支选择结构,它根据一些变量的值来决定执行哪个代码块。

它的语法形式如下:```switch (变量)case 值1://如果变量的值等于值1,执行这里的代码块break;case 值2://如果变量的值等于值2,执行这里的代码块break;default:// 如果变量的值不等于任何一个case,执行这里的代码块```switch语句根据变量的值与每个case的值进行比较,当找到匹配的case时,执行对应的代码块。

如果没有找到匹配的case,执行default后面的代码块。

循环程序设计是指重复执行一些代码块,直到满足一些条件为止。

在实际应用中,我们常常需要重复执行一些操作,这就需要使用循环结构来实现。

常见的循环结构有for循环、while循环和do-while循环。

1. for循环:for循环是最常用的循环结构之一,它的语法形式如下:```for (初始化表达式; 循环条件; 更新表达式)//循环体,执行这里的代码块```for循环由3个表达式组成:初始化表达式、循环条件和更新表达式。

在每次循环开始时,先执行初始化表达式;然后再判断循环条件,如果条件为真,执行循环体;执行完循环体后,再执行更新表达式。

单片机分支循环程序设计与调试

单片机分支循环程序设计与调试

实验性质:设计性实验级别:选做开课单位:信息工程系实验中心学时:2一、实验目的1.熟悉仿真器的软件使用环境及单片机汇编语言编程;2.基本了解数值的各种表达方法。

了解BCD值和ASCII值的区别3.掌握BCD码和ASCII码的原理及相互转换方法。

二、实验要求将本人的班号学号以压缩的BCD码的形式由低到高存放在50H开始的单元中,如将99071B3班转换为990713,99071B3班1号的数字为99071301。

将01→50H、13→51H、07→52H、99→53H。

然后编程将50H~53H中压缩的BCD 码转换成ASCII码,并由低到高存放在60H开始的单元中。

三、实验设备1.PC机一台;2.单片机开发环境Keil C软件。

四、参考程序框图图1 十进制到ASCII码转换参考程序框图五、实验步骤1.根据实验要求参照指导书设计压缩的BCD码转换成ASCII码的详细程序框图;2.启动单片机开发环境Keil C开发实验软件。

新建一个格式为*.Asm的文件。

3.根据自己设计程序框图,编写压缩的BCD码转换成ASCII码程序。

4.对所编写的程序进行编译、调试运行,观察其运行结果。

六、实验程序ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#30H ;设置栈指针MOV 50H,#35HMOV 51H,#43HMOV 52H,#06HMOV 53H,#05HMOV 54H,#08HMOV R0,#50HMOV R1,#60HMOV R2,#05H ;BCD码字节数MAIN1: MOV A,@R0MOV B,AANL A,#0FHACALL BCDASCMOV @R1,AMOV A,BSWAP AANL A,#0FHACALL BCDASCINC R1MOV @R1,AINC R1INC R0DJNZ R2,MAIN1SJMP $BCDASC: INC AMOVC A,@A+PCRETDB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39HEND七、实验结果及心得体会通过本次实验掌握了该试验软件的使用方法,及对程序学习。

汇编-循环与分支程序设计

汇编-循环与分支程序设计

汇编-循环与分支程序设计汇编-循环与分支程序设计导言汇编语言是计算机最底层的程序设计语言之一,它直接操作计算机的硬件资源。

循环和分支是编写汇编程序中常用的两种控制结构,它们能够使程序按照一定的条件执行不同的操作。

本文将介绍汇编语言中循环与分支的基本概念与程序设计技巧。

循环程序设计在汇编语言中,循环是通过条件判断和无条件跳转实现的。

常见的循环结构有`while`循环和`for`循环。

while循环assembly; 初始化init:; 初始化计数器值mov cx, 0; 循环开始loop_start:; 判断循环条件cmp cx, 10je loop_end; 执行循环体操作 ;; 递增计数器inc cx; 跳转到循环开始处 jmp loop_start; 循环结束loop_end:;for循环assembly; 初始化init:; 初始化计数器值 mov cx, 0; 计数器上界mov dx, 10; 循环开始loop_start:; 判断循环条件cmp cx, dxjg loop_end; 执行循环体操作 ;; 递增计数器inc cx; 跳转到循环开始处 jmp loop_start; 循环结束loop_end:;分支程序设计在汇编语言中,分支是通过条件判断和条件跳转实现的。

常见的分支结构有`if`语句和`switch`语句。

if语句assembly; 判断条件cmp ax, bxjg greaterje equaljl lessgreater:; 条件为真时执行的语句;equal:; 条件为真时执行的语句 ;less:; 条件为真时执行的语句 ;switch语句assembly; 计算switch表达式的值mov ax, switch_value; 开始判断cmp ax, 1je case_1cmp ax, 2je case_2cmp ax, 3je case_3jmp default; case 1case_1:; 执行case 1的语句 ;; case 2case_2:; 执行case 2的语句 ;; case 3case_3:; 执行case 3的语句 ;; defaultdefault:; 执行default语句 ;总结循环和分支是汇编语言中常用的程序设计结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称分支及循环程序设计成绩
指导教师******
专业班级****** 姓名白*** 学号*******
联系电话********
一、任务要求
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.不要加封面。

相关文档
最新文档