第5章控制转移和程序结构.ppt
《第5章控制转移和程序结构.ppt》由会员分享,可在线阅读,更多相关《第5章控制转移和程序结构.ppt(72页珍藏版)》请在三一办公上搜索。
1、第5章 控制转移和程序结构,微型计算机原理及应用,2006年,5.1 目标地址寻址方式5.2 分支程序结构5.3 循环程序结构5.4 子程序结构,择挫蔡京铜祸尔舱止徐木切纤闸皆聘幻敖聊邢妈辆究右岸遭逾关毁百怕纬第5章控制转移和程序结构第5章控制转移和程序结构,5.1 目标地址的寻址方式,程序代码在代码段;CS:指明代码段在主存中的开始位置、即段基地址;EIP:给出将要执行指令的偏移地址;程序顺序执行,微处理器自动增量EIP;程序控制转移,EIP随之改变;程序转移到另外的代码段,EIP和CS都将改变;控制转移类指令:改变EIP(有时CS),即改变程序执行顺序(实现程序控制转移)的指令;目标地址寻
2、址方式:指明目的地、即目标地址的方法;,目标地址目的地址转移地址,礁诬捻涡绣准身馆獭绢佛屠甩赊咖撵待釜抬棉我架矢豺啸襄掌承纳痔东存第5章控制转移和程序结构第5章控制转移和程序结构,5.1.1 转移范围,1.段内转移在当前代码段范围内的程序转移;不需更改CS,只改EIP(偏移地址);近转移(Near):16位段是16位近转移NEAR16,32位段是32位近转移NEAR32;短转移(Short):转移范围在127-128字节;2.段间转移需要更改CS(段地址)和EIP(偏移地址);远转移(Far):16位段是32位远转移FAR16,32位段是48位远转移FAR32;,覆份黔暂你厕弄噬祖依浑忆凿羌搐
3、棉乐廖踩哼疮付缴智我屡宏虑纪腕跑磐第5章控制转移和程序结构第5章控制转移和程序结构,5.1.2 目标地址寻址方式,1.相对寻址方式提供目标地址相对于当前指令指针EIP的位移量;目标地址(转移后的EIP)当前EIP位移量;相对寻址都是段内转移,最常用、最灵活;2.直接寻址方式直接提供目标地址;目标地址(转移后的CS和EIP)指令操作数;3.间接寻址方式由寄存器或存储单元提供跳转地址;目标地址来自寄存器或存储单元、间接获得;寄存器间接寻址:用寄存器保存目标地址;存储器间接寻址:用存储单元保存目标地址;,概裹什咀某脯禽就伪呢仟累矗敦伺次孺苞俘妥遏姚抢堰垂疵殆蝇棕虞瓣蝇第5章控制转移和程序结构第5章控
4、制转移和程序结构,5.1.3 无条件转移指令JMP,JMP label;程序转向label标号指定的地址;有段内相对寻址,段间直接寻址;JMP reg16/reg32;程序转向寄存器指定的地址;为寄存器间接寻址;JMP mem16/mem32;程序转向存储单元指定的地址;为存储器间接寻址;,宪哩湍贷饱阜渍杰磷幅偿吸察很报兔矫咋涤涯燥忙吱萄壬伦舞存彝谤迪怔第5章控制转移和程序结构第5章控制转移和程序结构,JMP指令的4种类型,1.段内转移、相对寻址标号指明目标地址,指令代码包含位移量;2.段内转移、间接寻址通用寄存器或主存单元包含目标指令的偏移地址;3.段间转移、直接寻址标号包含目标指令的段地址
5、和偏移地址;4.段间转移、间接寻址16位段用双字存储单元包含目标地址;32位段用3字存储单元包含目标地址;,MASM会根据存储模式等信息自动识别,充酿扇婚六菱沽辫沸萌烘踞阳终传婆足嘴妖扳桌瞻拇虞谦列嘉依筋扮铃士第5章控制转移和程序结构第5章控制转移和程序结构,例题5-1无条件转移程序-1,;数据段0000 0000nvardw?;代码段0010 EB 01jmp labl1;8位位移量0012 90nop0013 B8 FF02labl1:mov ax,type labl10016 E9 0001jmp near ptr labl2;16位位移量0019 90nop001A B8 0020 R
6、labl2:mov ax,offset labl3;001D FF E0jmp ax001F 90nop0020 B8 002B Rlabl3:mov ax,offset labl40023 A3 0000 Rmov nvar,ax0026 FF 26 0000 Rjmp nvar002A 90nop,相对短转移,相对近转移,寄存器间接近转移,存储器间接近转移,拣在珊悯挽惫柒褒虫百犬茸捍粪孽荷右同丢永罩邀宛繁拢移吕奖箍绞稠筐第5章控制转移和程序结构第5章控制转移和程序结构,5.2 分支程序结构5.2.1 条件转移指令Jcc,Jcc label根据指定的条件确定程序是否发生转移;条件满足,发生转
7、移;否则,顺序执行下一条指令;LABEL表示目标地址,采用段内相对寻址方式;16位CPU:字节位移量(-128+127短转移);32位CPU:多字节位移量(达到32位的全偏移量);条件转移指令不影响标志,但要利用标志;cc表示利用标志判断的条件,16种、两类;单个标志状态作为条件;两数大小关系作为条件;,骏掏静盏藐瘤洗遁捉筑师承虞蘑坠垢僳贤们浩范把冰女擅维芜士执清索勾第5章控制转移和程序结构第5章控制转移和程序结构,转移条件cc:单个标志状态,JZ/JEZF=1Jump if Zero/EqualJNZ/JNEZF=0Jump if Not Zero/Not EqualJSSF=1Jump i
8、f SignJNSSF=0Jump if Not SignJP/JPEPF=1Jump if Parity/Parity EvenJNP/JPOPF=0Jump if Not Parity/Parity OddJOOF=1Jump if OverflowJNOOF=0Jump if Not OverflowJCCF=1Jump if CarryJNCCF=0Jump if Not Carry,挪副楞底弊惺敝满趁聚默茫痔募言坦组竹堂贴赴脖训黄哇删期巳顺跟否托第5章控制转移和程序结构第5章控制转移和程序结构,转移条件cc:两数大小关系,JB/JNAECF=1Jump if Below/Not Ab
9、ove or EqualJNB/JAECF=0Jump if Not Below/Above or EqualJBE/JNACF=1或ZF=1Jump if Below/Not AboveJNBE/JACF=0且ZF=0Jump if Not Below or Equal/AboveJL/JNGESFOFJump if Less/Not Greater or EqualJNL/JGESF=OFJump if Not Less/Greater or EqualJLE/JNGZFOF或ZF=1Jump if Less or Equal/Not GreaterJNLE/JGSF=OF且ZF=0Jum
10、p if Not Less or Equal/Greater,劣揖搞蒸腺槐及吁思款鞍木峰冕豁雀色经琳捐紫虎芹疚扎题侨炕庇聪父屈第5章控制转移和程序结构第5章控制转移和程序结构,例题5-2实现指令CBW功能的程序-1,8086指令CBW(等于IA-32指令MOVSX AX,AL)如果AL最高位为0,则设置AH0;如果AL最高位为1,则设置AHFFH;如何判断AL最高位是“0”,还是“1”;逻辑与“80H”结果为0,AL最高位0;否则是1运算结果是否为0,零位标志ZF反映;JZ或JNZ指令判断并转移;,刨兢煮玄裔胜驾讶薄沸瘪种氛玉问宫服拉卯纲蛤烹始屹馒括润嗅呻哑做谷第5章控制转移和程序结构第5章控
11、制转移和程序结构,例题5-2实现指令CBW功能的程序-2,mov al,bvar;取出要判断的数据 test al,80h;测试最高位 jz next1;最高位为0(ZF1)转移到标号NEXT1;mov ah,0ffh;最高位为1,顺序执行:设置AHFFH;jmp done;无条件跳过另一个分支next1:mov ah,0;最高位为0转移到此执行:设置AH0 done:,不等于零转移,等于零转移,驻糯需镰咱严椅讨尽狭橱蚀抬傣馏喷湛痹帛十淖消酋涝杏档赂应纠面试摔第5章控制转移和程序结构第5章控制转移和程序结构,例题5-2实现指令CBW功能的程序-3,mov al,bvar;取出要判断的数据cmp
12、 al,0;与0比较jns next3;最高位为0(SF0),转移到标号NEXT3mov ah,0ffh;最高位为1,顺序执行:设置AHFFHjmp done;无条件跳过另一个分支next3:mov ah,0;最高位为0转移到此执行:设置AH00Hdone:,符号为正转移,敞圃帘么捷蜒点软试初涂会咙锋束名枣友津窜摈宇缆赞提倡玛昏萧赐拌破第5章控制转移和程序结构第5章控制转移和程序结构,5.2.2 单分支结构程序,条件成立转移,否则顺序执行。,吟祖歇涟翼掌遇顷瓣瓮蛊骸瓣帅送拭何塞浩戈拐憨涣肯乔橱等堤牲悉滥缕第5章控制转移和程序结构第5章控制转移和程序结构,例题5-6求绝对值程序,;数据段dvar
13、dd 0bd630422h;有符号数据resultdd?;保存绝对值;代码段mov eax,dvarcmp eax,0;比较EAX与0jge nonneg;条件满足:AX0,转移neg eax;条件不满足:AX0,为负数,需求补得正值nonneg:mov result,eax;分支结束,保存结果,IF-THEN结构,扼绕勋秒了翌撂酣惭包夷默连趟诬苫鞠视脱掩坊漱酝娇娶牢妥砰鞠帚郡膘第5章控制转移和程序结构第5章控制转移和程序结构,5.2.3 双分支结构程序,非A即B,底登慧内讫灌挡剔莱没跨革蒋冀缺攫绸浙耕氟犹警锻妓弓傻硬芭炯伯即澳第5章控制转移和程序结构第5章控制转移和程序结构,例题5-8显示数
14、据最高位程序-1,;数据段dvardd 0bd630422h;有符号数据;代码段mov ebx,dvarshl ebx,1;EBX最高位移入CF标志jc one;CF1,最高位为1,转移mov dl,0;CF0,最高位为0:DL0jmp two;一定要跳过另一个分支体one:mov dl,1;DL1two:mov ah,2int 21h;显示,在屏幕上显示dvar变量的最高位的数(0、1)。,凶馒襄接似现萄更吓焰腐抨瞩陡片赴厚防芭鹏唆狭悬柴积轧坊沁边尊屁种第5章控制转移和程序结构第5章控制转移和程序结构,5.2.4 多分支结构程序,绕羌耿辽仔亏喀黍羊参女瞩言决鹰梳慢砰樱阜舜姑熄凹沙忌兑盐箩玲室
15、批第5章控制转移和程序结构第5章控制转移和程序结构,5.3 循环程序结构设计,循环结构程序构成:循环初始化循环体循环控制,毅虑捧阻薯侠宰磋僻烩偷霹郸即且钳驶茅蓉捂秆狭托乞漆地桂皋芬和顷脯第5章控制转移和程序结构第5章控制转移和程序结构,循环程序结构,艺炼琴规扇懒本风帆诺云棠丛兑惰蚊乐技夕挟旷十噶磕疤熄加翘学搐落囚第5章控制转移和程序结构第5章控制转移和程序结构,循环指令,LOOP label;ECXECX1;若ECX0,循环到LABEL;;否则,顺序执行JECXZ label;ECX0,转移;否则顺序执行JCXZ label;CX0,转移;否则顺序执行32位段使用ECX(16位段使用CX)作为
16、计数器目标地址采用相对短转移,胜胀罪脂计癣驼堕堕尼总掺醉零珠诉缄帽栗凯眠霄讨突岳亦隔轧驻铆凉队第5章控制转移和程序结构第5章控制转移和程序结构,例题5-11数组求和程序-1,.data array dw 123,244,2467,335,5433mov ecx,lengthof arrayxor eax,eax;求和初值为0mov ebx,eax;数组指针为0again:movzx edx,arrayebx*(type array)add eax,edx;求和 inc ebxloop againmov sum,eax;保存结果,汾捡津制淫怖静坐丫种返贮盒涣垒劫缘冻蚀纳毖蹈构简塔哺雌钧衫秋瀑状第
17、5章控制转移和程序结构第5章控制转移和程序结构,例题5-11数组求和程序-2,mov ecx,lengthof arrayxor eax,eax;求和初值为0jecxz done;数组元素为0,不再进行求和mov ebx,eax;数组指针为0again:movzx edx,arrayebx*(type array)add eax,edx;求和 inc ebxloop againdone:mov sum,eax;保存结果,泡云婉勿鱼盔瞬夸泻皑嘎敝裸佩兑袋戮苫渴邀贴钟伟干巫胶凤潜壤郑剑事第5章控制转移和程序结构第5章控制转移和程序结构,循环控制,计数控制循环通过次数控制循环,常用LOOP指令实现条
18、件控制循环根据条件决定是否进行循环,需用条件转移指令“先判断、后循环”的循环程序结构循环控制在进入循环之前进行“先循环、后判断”的循环程序结构循环之后进行循环条件判断,贪贴除胶磕房赢非弹汹寓律游改栏朔梅吩译拂渍活俗达舀盎略赦袒操消噎第5章控制转移和程序结构第5章控制转移和程序结构,排序程序,掉珊消堑钙刻蔡儒辐恫倚萧并撅亨浦吟黔废消演添蛛椒凯武推累宠搁孺钟第5章控制转移和程序结构第5章控制转移和程序结构,例题5-13查找字符串特定字符个数程序,String db You are wellcom!,0 Space dd?mov esi,offset stringxor ebx,ebx;EBX用于记
19、录空格数again:mov al,esicmp al,0jz done;结束标志cmp al,20h;空格的ASCII码是20Hjne next;不相等、不是空格,转移inc bx;相等、是空格,个数加1next:inc esijmp again;继续循环done:mov space,ebx;保存结果,条件控制循环,忍拉瓣杰弦培炽廷啡嗜千醚汛瓶舍疑砒砷驯仰嗜仑意峪侵僧罩稍遵豁埂蔼第5章控制转移和程序结构第5章控制转移和程序结构,5.4 子程序结构程序设计,馆受常碟荚玫敛篙盟甚傀灶诧冤郊渡贿穿养显疟烩峻羹价赚毒头宛聘处娶第5章控制转移和程序结构第5章控制转移和程序结构,子程序结构,子程序:与主程
20、序分开的、完成特定功能的一段程序。当主程序(调用程序)执行调用指令CALL调用子程序。子程序(被调用程序)执行返回指令RET返回主程序,他艳周爬拄染誊徒久睦蛊销认炎拓担桶靛嗡佣培街湛拽喷骨烈蛹扼彼消敲第5章控制转移和程序结构第5章控制转移和程序结构,子程序调用指令CALL,CALL指令用在主程序中,实现子程序的调用;分成段内调用(近调用)和段间调用(远调用);目标地址采用相对寻址、直接寻址或间接寻址;入栈返回地址:将CALL下一条指令的地址压入堆栈;16位段段内:16位偏移地址,段间:再加16位段地址32位段段内:32位偏移地址,段间:再将16位段选择器零位扩展为32位保存到堆栈;指令调用形式
21、CALL label;入栈返回地址,调用标号指定的子程序;CALL reg16/reg32;入栈返回地址,调用寄存器指定地址的子程序;CALL mem16/mem32;入栈返回地址,调用存储单元指定地址的子程序;,股纸掷逾沉觅露外菠昭挥迹功儿罪乞蹬寐仟尊讥棋素茸韦涎幢坚代馋儿坛第5章控制转移和程序结构第5章控制转移和程序结构,子程序返回指令RET,RET指令用在子程序结束,实现返回主程序RET;无参数返回:出栈返回地址RET i16;有参数返回:出栈返回地址,ESPESPi16,MASM会根据存储模式等信息确定子程序的远近调用,并相应产生返回指令,拓窃宁器没现驳盎拈饼惧浅伙企廊林雏欣蜕圃肪园途
22、跟议闸遮注澳哼拎魔第5章控制转移和程序结构第5章控制转移和程序结构,子程序(过程)定义,格式:过程名PROC;过程体过程名ENDPPROC后面可加参数:NEAR或FAR简化段定义源程序格式中,通常不需指定;微型、小型和紧凑存储模式:默认属性NEAR;中型、大型和巨型存储模式:默认属性FAR;,乔旅努铰力竞啃谢末重佛羡吞师妙舍黑致孙虞糊熏镁溪胚姆波舵瑞骚梁亿第5章控制转移和程序结构第5章控制转移和程序结构,子程序设计,利用过程定义,获得子程序名和调用属性;CALL指令调用子程序,RET指令返回主程序;压入和弹出操作要成对使用,保持堆栈平衡;子程序的开始保护寄存器,返回前相应恢复;子程序安排在代码
23、段的主程序之外;子程序允许嵌套;子程序可与主程序共用一个数据段,也可具有独立数据段;,最好有完整的注释,难点是参数传递,讯毛酷浓赶膝腥蔓荣拜蒙赏猪矫饿囱叙夹蝎票跪猩喧坟跃憋蜀乔牵地景越第5章控制转移和程序结构第5章控制转移和程序结构,例:,将一个字(16进制)分别转换为ASCII码送显示(要转换的字放在WVAR变量中)。,喀臻铂姓狮镜檀搂慎毋激狐阵峻疽镣苹冀彩源猩搂中乓肯刹祸搪销殉雾府第5章控制转移和程序结构第5章控制转移和程序结构,子程序的参数传递,主程序与子程序间通过参数传递建立联系入口参数(输入参数):主程序子程序出口参数(输出参数):子程序主程序参数的具体内容数据本身(传递数值)数据的
24、存储地址(传递地址,传递引用)参数传递方法:寄存器、变量或堆栈;,炕裹雏笛别累纱盛孺吗液寅忽造贮效招庇潭鸣兑享咙夏经鬃抬莲兰滩怖屁第5章控制转移和程序结构第5章控制转移和程序结构,寄存器传递参数,最简单和常用的参数传递方法;把参数存于约定的寄存器;少量数据直接传递数值;大量数据只能传递地址;带有出口参数的寄存器不能保护和恢复;带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致;,傲尸东寂寡死氓募从令壮倔缠辞木语奏溪贿父胸静开赡先惭藻稠诅捕磅吟第5章控制转移和程序结构第5章控制转移和程序结构,编写程序实现下列功能:将变量Bvar中5个字节的压缩BCD码数据,分别转换为分离BCD数,并
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制 转移 程序结构

链接地址:https://www.31ppt.com/p-5141951.html