分支与循环程序设计.ppt

上传人:牧羊曲112 文档编号:6094492 上传时间:2023-09-23 格式:PPT 页数:33 大小:320.99KB
返回 下载 相关 举报
分支与循环程序设计.ppt_第1页
第1页 / 共33页
分支与循环程序设计.ppt_第2页
第2页 / 共33页
分支与循环程序设计.ppt_第3页
第3页 / 共33页
分支与循环程序设计.ppt_第4页
第4页 / 共33页
分支与循环程序设计.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《分支与循环程序设计.ppt》由会员分享,可在线阅读,更多相关《分支与循环程序设计.ppt(33页珍藏版)》请在三一办公上搜索。

1、第5章 分支与循环程序设计,5.1 转移 5.2 分支结构程序设计 5.3 循环程序设计 5.4 跳转表,5.1 转移,转移指令分:无条件转移指令条件转移指令,5.1.1 无条件转移指令,无条件转移指令JMP 作用相当于goto语句,但使用频繁。分为:段内转移 段内短转移段间转移,1段内转移,格式:JMP SRC功能:跳转到SRC指定的位置继续执行 SRC可以是:程序标号 如:JMP _Done寄存器 如:JMP EAX内存操作数 如:JMP EBX,2段内短转移,格式:JMP SHORT SRCJMP指令仅占2字节SRC必须是一个程序标号同JMP SRC相比,短转移跳转的范围较小,3段间转移

2、,在保护模式下,段间转移指令用来切换任务跳转到调用门指定的程序入口执行另一个代码段内的程序 例如:JMP 0060:005B5E20,5.1.2 条件转移指令,格式:JCC LABELX功能:如果条件CC为真,则转移到LABELX处执行,否则顺序执行下一条指令。LABELX是程序中的一个标号;CC是条件标志位,指定了转移的条件。,条件转移指令分类,1依据单个标志位的条件转移指令2依据有符号数比较结果的条件转移指令3依据无符号数比较结果的条件转移指令4依据CX/ECX是否为0的条件转移指令,1依据单个标志位的条件转移指令,例如,求DIST|AB|。MOV EAX,A SUB EAX,B JNS

3、A10 NEG EAXA10:MOV DIST,EAX JNS比较SF的值,如果EAX是正数或0,就跳转到A10,否则执行下一句。,2依据有符号数比较结果的条件转移指令,例如,求有符号数A和B的较大值MAXAB。MOV EAX,A CMP EAX,B JGE a20 MOV EAX,Ba20:MOV MAXAB,EAXA大于等于B时,跳转到a20处,此时EAXA;A小于B时,不跳转,EAXB。,3依据无符号数比较结果的条件转移指令,例如,求无符号数A和B的最大值MAXAB MOV EAX,A cmp EAX,B JAE a30 MOV EAX,Ba30:MOV MAXAB,EAX和前面程序的区

4、别只在于条件跳转指令的选择。有符号数判断使用JGE,而无符号数判断使用JAE。,4依据CX/ECX是否为0的条件转移指令,格式1:JCXZ LABELX格式2:JECXZ LABELX功能:如果CX/ECX等于0,则转移到LABELX处执行,否则顺序执行下一条指令。,5.2 分支结构程序设计,5.2.1 单分支结构和双分支结构 5.2.2 多分支结构5.2.3 折半查找程序 5.2.4 有序表插入,5.2.1 单分支结构和双分支结构,单分支结构,双分支结构,对于单分支结构的程序,由条件转移指令来判断条件是否满足:条件满足时,跳过分支程序条件不满足时,继续向下执行,执行完分支后汇合。这点与C语言

5、if语句不同。,5.2.2 多分支结构,以双分支结构为基础可以写出多分支结构的程序。下面是求X的符号的函数的C程序和汇编程序的片段:sign.c sign.asm判断是否为闰年的程序片段leapyear.asm 比较日期大小的程序片段 date.asm,5.2.3 折半查找程序,流程图(数组为R,元素个数n,数为a),折半查找执行过程,(1)设定一个查找范围,下界为L和上界为h(2)如果下界L大于上界h,则查找范围为空,查找结束。算法结束。(3)取下界L和上界h的中点 m(L+h)/2(4)从数组的中点m处取出一个数Rm,和a进行比较。,折半查找执行过程(续),(5)如果Rm等于a,则在数组中

6、找到a,下标为m。算法结束。(6)如果Rm大于a,则修改上界h为m1。然后跳转到第2步。(7)如果Rm小于a,则修改下界l为m+1。然后跳转到第2步。实现折半查找的程序样例:split.asm结果为:Index=5 Count=3 Element=680,5.2.4 有序表插入,要插入一个数到有序表中找到插入位置把数组的元素逐个向后移动将这个数写到空出的位置实现有序表插入的程序 样例:insert.asm,5.3 循环程序设计,循环程序包含3部分:循环初始化部分循环体循环控制部分 常见的循环控制结构:while-do结构do-while结构,while-do结构和do-while结构,5.3.

7、1 循环指令,LOOP指令循环次数放在ECX中,一般用于固定次数格式:LOOP 标号功能:ECX先减1,再检查ECX:ECX的值不为0,则跳转到标号处继续循环;如果ECX的值为0,则循环结束。,LOOP指令,循环的格式为:MOV ECX,循环次数 标号:循环体 LOOP 标号举例:计算n!的递归程序 factoria.asm 结果:factorial(5)=120,LOOPZ和LOOPNZ指令,LOOPZ和LOOPNZ指令:循环体执行一次后,不仅要检查ECX的值,还会检查ZF。格式:LOOPZ(LOOPNZ)标号功能:ECX先减1,再检查ECX和ZF标志位:如果ECX的值不为0,并且ZF为1(

8、0),则跳转到标号处继续循环;否则继续执行LOOPZ后面的下一条指令,循环结束。,样例:数值转换convert.asm结果:hex format=18ef1365hdec format=0418321253dbits of 1=16,5.3.2 不定次数的循环,某些循环的执行次数预先并不能完全确定,而是根据执行的情况来决定是否继续循环或退出循环。这时,就不再适合用LOOP指令来构造循环了,而应该利用条件跳转指令来构造和控制循环。,5.3.3 循环体中操作的控制,可以用数据来描述循环体内部的操作:每次循环过程中取出数据来决定循环要做的操作。例如:由X和Y数组计算数组Z的计算公式为:Z0X0+Y0

9、 Z1X1+Y1 Z2X2-Y2 Z3X3-Y3 Z4X4-Y4Z5X5+Y5 Z6X6+Y6 Z7X7-Y7 Z8X8+Y8 Z9X9-Y9则再设定一个数组OP,用0和1表示加法和减法。当计算Z的元素时,取出OP数组中的对应元素,来决定是做加法还是减法。,5.3.4 多重循环,循环嵌套构成多重循环 例如:将数组中的7个元素从小到大排列好,冒泡排序例子bubble.asm,过程如下,5.4 跳转表,适合程序中分支很多的情况 C语言使用switch语句汇编程序使用跳转表要实现一个简易的计算程序,输入两个操作数和一个运算符,计算结果并显示出来。C语言举例:equation.c 汇编语言举例:equation.asm,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号