分支与循环程序设计

分支与循环程序设计

ID:27539228

大小:332.01 KB

页数:33页

时间:2018-12-01

分支与循环程序设计_第1页
分支与循环程序设计_第2页
分支与循环程序设计_第3页
分支与循环程序设计_第4页
分支与循环程序设计_第5页
资源描述:

《分支与循环程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、下,段间转移指令用来切换任务跳转到调用门指定的程序入口执行另一个代码段内的程序例如:JMP0060:005B5E205.1.2条件转移指令格式:JCCLABELX功能:如果条件CC为真,则转移到LABELX处执行,否则顺序执行下一条指令。LABELX是程序中的一个标号;CC是条件标志位,指定了转移的条件。条件转移指令分类1.依据单个标志位的条件转移指令2.依据有符号数比较结果的条件转移指令3.依据无符号数比较结果的条件转移指令4.依据CX/ECX是否为0的条件转移指令1.依据单个标志位的条件转移指令例如,求DIST

3、A–B

4、。MOVEAX,ASU

5、BEAX,BJNSA10NEGEAXA10:MOVDIST,EAXJNS比较SF的值,如果EAX是正数或0,就跳转到A10,否则执行下一句。2.依据有符号数比较结果的条件转移指令例如,求有符号数A和B的较大值MAXAB。MOVEAX,ACMPEAX,BJGEa20MOVEAX,Ba20:MOVMAXAB,EAXA大于等于B时,跳转到a20处,此时EAXA;A小于B时,不跳转,EAXB。3.依据无符号数比较结果的条件转移指令例如,求无符号数A和B的最大值MAXABMOVEAX,AcmpEAX,BJAEa30MOVEAX,Ba30:MOVMAXAB

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

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

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

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

10、:LOOPZ(LOOPNZ)标号功能:ECX先减1,再检查ECX和ZF标志位:如果ECX的值不为0,并且ZF为1(0),则

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。