欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第5章控制转移和程序结构.ppt

    • 资源ID:5141951       资源大小:369.50KB        全文页数:72页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第5章控制转移和程序结构.ppt

    第5章 控制转移和程序结构,微型计算机原理及应用,2006年,5.1 目标地址寻址方式5.2 分支程序结构5.3 循环程序结构5.4 子程序结构,择挫蔡京铜祸尔舱止徐木切纤闸皆聘幻敖聊邢妈辆究右岸遭逾关毁百怕纬第5章控制转移和程序结构第5章控制转移和程序结构,5.1 目标地址的寻址方式,程序代码在代码段;CS:指明代码段在主存中的开始位置、即段基地址;EIP:给出将要执行指令的偏移地址;程序顺序执行,微处理器自动增量EIP;程序控制转移,EIP随之改变;程序转移到另外的代码段,EIP和CS都将改变;控制转移类指令:改变EIP(有时CS),即改变程序执行顺序(实现程序控制转移)的指令;目标地址寻址方式:指明目的地、即目标地址的方法;,目标地址目的地址转移地址,礁诬捻涡绣准身馆獭绢佛屠甩赊咖撵待釜抬棉我架矢豺啸襄掌承纳痔东存第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;,覆份黔暂你厕弄噬祖依浑忆凿羌搐棉乐廖踩哼疮付缴智我屡宏虑纪腕跑磐第5章控制转移和程序结构第5章控制转移和程序结构,5.1.2 目标地址寻址方式,1.相对寻址方式提供目标地址相对于当前指令指针EIP的位移量;目标地址(转移后的EIP)当前EIP位移量;相对寻址都是段内转移,最常用、最灵活;2.直接寻址方式直接提供目标地址;目标地址(转移后的CS和EIP)指令操作数;3.间接寻址方式由寄存器或存储单元提供跳转地址;目标地址来自寄存器或存储单元、间接获得;寄存器间接寻址:用寄存器保存目标地址;存储器间接寻址:用存储单元保存目标地址;,概裹什咀某脯禽就伪呢仟累矗敦伺次孺苞俘妥遏姚抢堰垂疵殆蝇棕虞瓣蝇第5章控制转移和程序结构第5章控制转移和程序结构,5.1.3 无条件转移指令JMP,JMP label;程序转向label标号指定的地址;有段内相对寻址,段间直接寻址;JMP reg16/reg32;程序转向寄存器指定的地址;为寄存器间接寻址;JMP mem16/mem32;程序转向存储单元指定的地址;为存储器间接寻址;,宪哩湍贷饱阜渍杰磷幅偿吸察很报兔矫咋涤涯燥忙吱萄壬伦舞存彝谤迪怔第5章控制转移和程序结构第5章控制转移和程序结构,JMP指令的4种类型,1.段内转移、相对寻址标号指明目标地址,指令代码包含位移量;2.段内转移、间接寻址通用寄存器或主存单元包含目标指令的偏移地址;3.段间转移、直接寻址标号包含目标指令的段地址和偏移地址;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 Rlabl2: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根据指定的条件确定程序是否发生转移;条件满足,发生转移;否则,顺序执行下一条指令;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 if 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 Above 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=0Jump 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章控制转移和程序结构,例题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 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求绝对值程序,;数据段dvardd 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显示数据最高位程序-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 多分支结构程序,绕羌耿辽仔亏喀黍羊参女瞩言决鹰梳慢砰樱阜舜姑熄凹沙忌兑盐箩玲室批第5章控制转移和程序结构第5章控制转移和程序结构,5.3 循环程序结构设计,循环结构程序构成:循环初始化循环体循环控制,毅虑捧阻薯侠宰磋僻烩偷霹郸即且钳驶茅蓉捂秆狭托乞漆地桂皋芬和顷脯第5章控制转移和程序结构第5章控制转移和程序结构,循环程序结构,艺炼琴规扇懒本风帆诺云棠丛兑惰蚊乐技夕挟旷十噶磕疤熄加翘学搐落囚第5章控制转移和程序结构第5章控制转移和程序结构,循环指令,LOOP label;ECXECX1;若ECX0,循环到LABEL;;否则,顺序执行JECXZ label;ECX0,转移;否则顺序执行JCXZ label;CX0,转移;否则顺序执行32位段使用ECX(16位段使用CX)作为计数器目标地址采用相对短转移,胜胀罪脂计癣驼堕堕尼总掺醉零珠诉缄帽栗凯眠霄讨突岳亦隔轧驻铆凉队第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;保存结果,汾捡津制淫怖静坐丫种返贮盒涣垒劫缘冻蚀纳毖蹈构简塔哺雌钧衫秋瀑状第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指令实现条件控制循环根据条件决定是否进行循环,需用条件转移指令“先判断、后循环”的循环程序结构循环控制在进入循环之前进行“先循环、后判断”的循环程序结构循环之后进行循环条件判断,贪贴除胶磕房赢非弹汹寓律游改栏朔梅吩译拂渍活俗达舀盎略赦袒操消噎第5章控制转移和程序结构第5章控制转移和程序结构,排序程序,掉珊消堑钙刻蔡儒辐恫倚萧并撅亨浦吟黔废消演添蛛椒凯武推累宠搁孺钟第5章控制转移和程序结构第5章控制转移和程序结构,例题5-13查找字符串特定字符个数程序,String db You are wellcom!,0 Space dd?mov esi,offset stringxor ebx,ebx;EBX用于记录空格数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章控制转移和程序结构,子程序结构,子程序:与主程序分开的、完成特定功能的一段程序。当主程序(调用程序)执行调用指令CALL调用子程序。子程序(被调用程序)执行返回指令RET返回主程序,他艳周爬拄染誊徒久睦蛊销认炎拓担桶靛嗡佣培街湛拽喷骨烈蛹扼彼消敲第5章控制转移和程序结构第5章控制转移和程序结构,子程序调用指令CALL,CALL指令用在主程序中,实现子程序的调用;分成段内调用(近调用)和段间调用(远调用);目标地址采用相对寻址、直接寻址或间接寻址;入栈返回地址:将CALL下一条指令的地址压入堆栈;16位段段内:16位偏移地址,段间:再加16位段地址32位段段内:32位偏移地址,段间:再将16位段选择器零位扩展为32位保存到堆栈;指令调用形式CALL label;入栈返回地址,调用标号指定的子程序;CALL reg16/reg32;入栈返回地址,调用寄存器指定地址的子程序;CALL mem16/mem32;入栈返回地址,调用存储单元指定地址的子程序;,股纸掷逾沉觅露外菠昭挥迹功儿罪乞蹬寐仟尊讥棋素茸韦涎幢坚代馋儿坛第5章控制转移和程序结构第5章控制转移和程序结构,子程序返回指令RET,RET指令用在子程序结束,实现返回主程序RET;无参数返回:出栈返回地址RET i16;有参数返回:出栈返回地址,ESPESPi16,MASM会根据存储模式等信息确定子程序的远近调用,并相应产生返回指令,拓窃宁器没现驳盎拈饼惧浅伙企廊林雏欣蜕圃肪园途跟议闸遮注澳哼拎魔第5章控制转移和程序结构第5章控制转移和程序结构,子程序(过程)定义,格式:过程名PROC;过程体过程名ENDPPROC后面可加参数:NEAR或FAR简化段定义源程序格式中,通常不需指定;微型、小型和紧凑存储模式:默认属性NEAR;中型、大型和巨型存储模式:默认属性FAR;,乔旅努铰力竞啃谢末重佛羡吞师妙舍黑致孙虞糊熏镁溪胚姆波舵瑞骚梁亿第5章控制转移和程序结构第5章控制转移和程序结构,子程序设计,利用过程定义,获得子程序名和调用属性;CALL指令调用子程序,RET指令返回主程序;压入和弹出操作要成对使用,保持堆栈平衡;子程序的开始保护寄存器,返回前相应恢复;子程序安排在代码段的主程序之外;子程序允许嵌套;子程序可与主程序共用一个数据段,也可具有独立数据段;,最好有完整的注释,难点是参数传递,讯毛酷浓赶膝腥蔓荣拜蒙赏猪矫饿囱叙夹蝎票跪猩喧坟跃憋蜀乔牵地景越第5章控制转移和程序结构第5章控制转移和程序结构,例:,将一个字(16进制)分别转换为ASCII码送显示(要转换的字放在WVAR变量中)。,喀臻铂姓狮镜檀搂慎毋激狐阵峻疽镣苹冀彩源猩搂中乓肯刹祸搪销殉雾府第5章控制转移和程序结构第5章控制转移和程序结构,子程序的参数传递,主程序与子程序间通过参数传递建立联系入口参数(输入参数):主程序子程序出口参数(输出参数):子程序主程序参数的具体内容数据本身(传递数值)数据的存储地址(传递地址,传递引用)参数传递方法:寄存器、变量或堆栈;,炕裹雏笛别累纱盛孺吗液寅忽造贮效招庇潭鸣兑享咙夏经鬃抬莲兰滩怖屁第5章控制转移和程序结构第5章控制转移和程序结构,寄存器传递参数,最简单和常用的参数传递方法;把参数存于约定的寄存器;少量数据直接传递数值;大量数据只能传递地址;带有出口参数的寄存器不能保护和恢复;带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致;,傲尸东寂寡死氓募从令壮倔缠辞木语奏溪贿父胸静开赡先惭藻稠诅捕磅吟第5章控制转移和程序结构第5章控制转移和程序结构,编写程序实现下列功能:将变量Bvar中5个字节的压缩BCD码数据,分别转换为分离BCD数,并存入变量BCDA中。(采用寄存器传递参数),婶嗜园安子芋谴吧斤锐痈份弃莫儒痢菇捆耀鹊檬峰帮献涨银噶蛊挞寅述呛第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-1,算法如下:首先判断输入正数还是负数,并用一个寄存器记录下来;接着输入09数字(ASCII码),并减30H转换为二进制数;然后将前面输入的数值乘10,并与刚输入的数字相加得到新的数值;重复2、3步,直到输入一个非数字字符结束;如果是负数进行求补,转换成补码;否则直接将数值保存,湿弹除盯晴委若莎桔挺层名花哮樱诉烂澡佩亿扣撇型摘涵泌胡丙缺隐贩翟第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-2,mov ecx,countmov ebx,offset arrayagain:call readsid;输入一个数据mov ebx,eax;存放出口参数add ebx,4call dpcrlf;光标回车换行loop again,吝瓣潘青房匠班度酥蓬寂刹恋宛奉俘捶遂肌僻筹辨忘往说矿庭讥鳖纠嚏妹第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-3,readsidproc;输入有符号十进制数子程序push ebx;说明:负数用“-”引导push ecxpush edxxor ebx,ebx;EBX保存结果xor ecx,ecx;ECX为正负标志:0为正,-1为负,德抽卓脆疤吞紧了藐迭量恭哲挝傻嚼距饶欲致翠一硷坍旷银切侦储崖欺彪第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-4,mov ah,1;输入一个字符int 21hcmp al,+;是“”,继续输入字符jz rsid1cmp al,-;是“”,设置1标志jnz rsid2mov ecx,-1,辞催户蒲央毅蔓为咱寸厩婉挽后蒂衔帅遏庭揖嚼挫啥蒋规龙暮棱烁瘴朽糠第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-5,rsid1:mov ah,1;继续输入字符int 21hrsid2:cmp al,0;不是09之间的字符,则输入数据结束jb rsid3cmp al,9ja rsid3sub al,30h;是09之间的字符,则转换为二进制数,芭芭象掘戊坤鉴感芦善讹秩侍肝茨倪镇细耕久局枫遗挎比贬炳巢蕾屠属闻第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-6,imul ebx,10;数值乘10:EBXEBX10movzx eax,aladd ebx,eax;与新输入数值相加jmp rsid1;继续输入字符rsid3:cmp ecx,0;是负数,进行求补jz rsid4neg ebxrsid4:mov eax,ebx;设置出口参数pop edxpop ecxpop ebxret;子程序返回readsidendp,荤呈迭枷喂必晒坪蔡零巾鳃腺奄耿宋徐阔畸铅从贞治虐蔡捍隶蔽淡捎碘烘第5章控制转移和程序结构第5章控制转移和程序结构,例题5-18有符号十进制数输入程序-7,dpcrlfproc;光标回车换行子程序push axpush dxmov ah,2mov dl,0dhint 21hmov ah,2mov dl,0ahint 21hpop dxpop axretdpcrlfendp,朴巷咽肢遗庆语准策畦蜗遍硒庄鸡匀翰溉蹄稼卯溅路墙道梦敌拽谩出马享第5章控制转移和程序结构第5章控制转移和程序结构,共享变量传递参数,子程序和主程序使用同一个变量名存取数据变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明共享变量传递参数,子程序的通用性较差特别适合在多个程序段间、尤其在不同的程序模块间传递数据,蕊鹃浩资急扒驯名兼泉好崭升敌叁忽趟圃万灯蕾稿锑朱吉怨昏矢垣岛合铱第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-1,算法如下:首先判断数据是零、正数或负数,是零显示“0”退出;是负数,显示“”,求数据的绝对值;接着数据除以10,余数加30H转换为ASCII码压入堆栈;重复第3步,直到商为0结束;依次从堆栈弹出各位数字,进行显示,摘伺腮甘鹊诉洞披翱沸昌甥暇绍婉戴腕馅渍访游师楚斥票胡剂葫落羌蛔惕第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-2,mov ecx,countmov ebx,0again:mov eax,arrayebx*4mov dtemp,eax;入口参数存放到共享变量call dispsid;调用子程序显示一个数据inc ebxcall dpcrlf;光标回车换行loop again,畅透拄荣维噬稻额滇髓脓客见睹玉蜡芒村外得聂询悔屑保研泼啊毯政透眺第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-3,dispsidproc;显示有符号十进制数子程序push eax;入口参数:共享变量DTEMPpush ebxpush edxmov eax,dtemp;取出显示数据test eax,eax;判断数据是零、正数或负数jnz dsid1mov dl,0;是零,显示“0”后退出mov ah,2int 21hjmp dsid5,那倡审嘻冀姐且忠兄替搬斟场樟崭丑玻询塑仿痈载角巡响饱犊惋铝陛秩唉第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-4,dsid1:jns dsid2;是负数,显示“-”mov ebx,eax;EAX数据暂存于EBXmov dl,-mov ah,2int 21hmov eax,ebxneg eax;数据求补(绝对值),顾烧遂巡柯谚温窟锋骗福嚏箕肆窃牢跪倔喂谬竹熟谬搏置麓殷殉汪烩聪秋第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-5,dsid2:mov ebx,10push bx;10压入堆栈,作为退出标志dsid3:cmp eax,0;数据(商)为零,转向显示jz dsid4sub edx,edx;扩展被除数EDX.EAXdiv ebx;数据除以10:EDX.EAX10add dl,30h;余数(09)转换为ASCII码push dx;数据先低位后高位压入堆栈jmp dsid3,致捧紫喻怪堵决航罩慷吵攘悲刁诅彝伙熏帘瓷略旨涛扬升显绰舞筒绎竣账第5章控制转移和程序结构第5章控制转移和程序结构,例题5-19有符号十进制数输出程序-6,dsid4:pop dx;数据先高位后低位弹出堆栈cmp dl,10;是结束标志10,则退出je dsid5mov ah,2;进行显示int 21hjmp dsid4dsid5:pop edxpop ebxpop eaxret;子程序返回dispsidendp,提逞伯溢龙斡估稍技湖熬诀敞抗蓟笔刃牵揽衔耽疮嵌徘啪弄晰疗集咙呜涟第5章控制转移和程序结构第5章控制转移和程序结构,堆栈传递参数,主程序将入口参数压入堆栈,子程序从堆栈中取出参数子程序将出口参数压入堆栈,主程序弹出堆栈取得它们采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法,宠栈励秩殿韶街屿国舱潜扰神岛遵辰熙志察惠葛型踢弱央擦寞恩涤试镶蓝第5章控制转移和程序结构第5章控制转移和程序结构,例题5-20计算有符号数平均值程序-1,算法如下:被加数进行符号扩展求和除以数据个数得到平均值32位有符号数扩展到64位,32位表示数据个数(最大232),不会溢出,掳陪戎锹靳痕洱佳洁褒巧洪腐糟善多揭羌挑酥同荡孤孕陶脐享工予锰甚往第5章控制转移和程序结构第5章控制转移和程序结构,例题5-20计算有符号数平均值程序-2,mov eax,countpush eax;压入数据个数(0表示232个)mov ebx,offset arraypush ebx;压入缓冲区的偏移地址call mean;调用子程序,求平均值add esp,8;平衡堆栈mov dmed,eax;保存出口参数,县很馈兴兹固户硼谷拽涯右辉岿慷燥坎垒郴粹同下崎惋罐付舆辞嚏今闰茶第5章控制转移和程序结构第5章控制转移和程序结构,例题5-20计算有符号数平均值程序-3,meanproc;计算有符号数平均值push ebpmov ebp,esppush ebx;保护寄存器push ecxpush edxpush esipush edimov ebx,ebp+6;从堆栈取偏移地址mov ecx,ebp+10;从堆栈取数据个数,堆栈示意图,跃珍乌谍拈隐傅今劈听晰宿脖谈屿驮迄购豁声酚恰呈珐凶陵姨利珊勺郁充第5章控制转移和程序结构第5章控制转移和程序结构,例题5-20计算有符号数平均值程序-4,xor esi,esi;ESI保存求和的低32位值mov edi,esi;EDI保存求和的高32位值mean1:mov eax,ebx;取出一个数据EAXcdq;符号扩展EDX.EAXadd esi,eax;求和低32位adc edi,edx;求和高32位add ebx,4;指向下一个数据dec ecx;数据个数减少一个jnz mean1;循环mov eax,esi;累加和在EDX.EAXmov edx,edi,本梁爪棋疥械距栖鬃两均诗呕桑锭奔硫株镑寸扳漏什屈獭腔码僵删外烈乒第5章控制转移和程序结构第5章控制转移和程序结构,例题5-20计算有符号数平均值程序-5,mov ecx,ebp+10;数据个数在CXidiv ecx;有符号数除法,EAX平均值(EDX余数)pop edi;恢复寄存器pop esipop edxpop ecxpop ebxpop ebpretmeanendp,脱闲屉颧泥秽米侣宿蒋苗艳尿碘非枷党井扩忽恳祥倪铅颐瓣盖淆爽纂束药第5章控制转移和程序结构第5章控制转移和程序结构,宏汇编,宏(Macro):具有宏名的一段汇编语句序列宏需要先定义宏名MACRO 形参表;宏定义体ENDM然后程序中进行宏调用宏名 实体参数宏定义体的标号必须用LOCAL伪指令声明LOCAL 标号1,标号2,涂猩戎蜕噬芥疆墅悍链焰馅亭队靛倚临推驯缓草拴猩恰裔荚旱俊诺讨莱圾第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-1,;宏定义dispmsgmacro message;message是形式参数push axpush dxmov ah,9lea dx,messageint 21hpop dxpop axendm,绦窄干乘平罐狗枫厄今蚌乾蔼疤萎珊拂陵梳迟云止绰咸车羊择造灶氮儡饲第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-2,asctohmacrolocal asctoh1,asctoh2cmp al,9jbe asctoh1;小于等于9,是09,只需减去30Hcmp al,ajb asctoh2;大于9小于a,是AF,还要减7sub al,20h;大于等于a,是af,再减去20Hasctoh2:sub al,7asctoh1:sub al,30hendm,倦沤咕仲咳晰爪叼酣杨恳诲烂潞成核梳冷醇言狼筷娠摆篆谱长损捻域亦柠第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-3,;数据段msgdb Please input,13,10,$wvardw?;代码段dispmsg msg;提示输入,毒患嗜厅辜例敌持抉机亦聚子附利隋陨染配种镭届茹烃炭宁吭次诌哗溉苹第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-4,mov cx,4mov bx,0;BX保存转换后的结果again:mov ah,6;输入字符但不显示mov dl,0ffh int 21hjz again;没有输入字符继续,功能调用,轻斥雨败藻藕菊缀业迁骡铰疆倔榴峻挨根散殆惑尺帮灯刷过盐氧藉炬喇袱第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-5,cmp al,0;测试是否是合法字符jb again;没有输入合法字符,重新输入cmp al,9jbe next;输入合法字符就显示cmp al,Ajb againcmp al,Fjbe nextcmp al,ajb againcmp al,fja again;测试结束,居咕睛曙耻献青较胞盖让队附泅逝女师煌琼臂厩哟烁歼矿趟针俐裤触络枫第5章控制转移和程序结构第5章控制转移和程序结构,例题5-21十六进制数输入程序-6,next:mov ah,6;显示输入字符mov dl,alint 21hasctoh;转换为十六进制数shl bx,4;将上次输入左移二进制4位add bl,al;加上本次输入的数码loop againmov wvar,bx,宏展开,摧杂矿源兆贝铭邀左年狮阁山丑听囤共偿介恍中琶痛纳耶灿钙堡粒鸳息鸣第5章控制转移和程序结构第5章控制转移和程序结构,宏与子程序,都简化源程序的书写,但有本质区别宏调用在汇编时复制宏定义语句执行时不存在控制的转移与返回没有减少汇编后的目标代码执行速度也没有改变子程序调用在执行时控制转移到子程序子程序没有被复制,汇编后的目标代码较短会影响程序执行速度宏与子程序各有特点,根据具体问题选择使用当程序段较短或要求较快执行时,应选用宏当程序段较长或为减小目标代码时,要选用子程序,丘肩篮胆瞻挡测霞掳侍两勾镐役洛因炬柠搭琴贫全炒震狼捶彭暮泉赔佬鹊第5章控制转移和程序结构第5章控制转移和程序结构,源文件包含,INCLUDE 文件名将INCLUDE伪指令指定的文本文件内容插入源程序可以包含任何文本文件一些常用的或有价值的宏定义存放在.MAC宏定义文件各种常量定义、声明语句等组织在.INC包含文件常用的子程序形成.ASM汇编语言源文件利用INCLUDE伪指令包含其他文件,其实质仍然是一个源程序,只不过是分在了几个文件书写include eg521e.mac;宏定义文件EG321E.MAC;只对主程序文件进行汇编、连接,举例,缓丫凤奋千源太怠巍弗熔皆狗舰霍乏扰徐寇首雇侍越菩钟涨徽青栈躇冒结第5章控制转移和程序结构第5章控制转移和程序结构,子程序模块,子程序单独编写,汇编形成目标模块OBJ文件连接时输入子程序模块文件名用共用伪指令PUBLIC和外部伪指令EXTERN声明PUBLIC 标识符,标识符;定义标识符的模块使用EXTERN 标识符:类型,标识符:类型;调用标识符的模块使用子程序在代码段,没有开始执行和结束执行点采用简化段源程序格式,存储模式一致解决参数传递问题,羽蔷祭拳聚挟煮声署辨珠违檄要其厂迭屁谈份噪策退胎十狠蹿太灿虐乱擒第5章控制转移和程序结构第5章控制转移和程序结构,例题5-22数据输入输出程序-1,;eg522s.asm(子程序文件).model small;相同的存储模式.486public readsid,dispsid,mean;子程序共用extern dtemp:dword;外部变量.code;代码段readsidproc;输入子程序dispsidproc;输出子程序meanproc;计算平均值子程序end,庶戮锨蓖五遮掷拜颊吭缄揪拜茵讫讣淘钱油枢睹潮约炎形橡涵臭券划糯躁第5章控制转移和程序结构第5章控制转移和程序结构,例题5-22数据输入输出程序-2,;eg522.asm(主程序文件).model small;相同的存储模式.486extern readsid:near,dispsid:near,mean:near;外部子程序public dtemp;变量共用.stack.datacount=10arraydd count dup(0)dtempdd?,郎缀译榷散邪棚等限爸折匡鼎瓤业铁柏站苟屁蓬源球觅油画傍办碑惦都厩第5章控制转移和程序结构第5章控制转移和程序结构,例题5-22数据输入输出程序-3,.code.startupmov dx,offset msg1;提示输入10个数据mov ah,9int 21hmov ecx,count;输入10个数据mov ebx,offset arrayagain:call readsid;输入一个数据mov ebx,eax add ebx,4call dpcrlf loop again,获尔宇氛厨鲍滩够洽僚兆炸黔哗酬苑孪藻桃苔讳波吁仇玉赴引落鸳捐弄陆第5章控制转移和程序结构第5章控制转移和程序结构,例题5-22数据输入输出程序-4,mov eax,count;传递参数push eaxmov ebx,offset arraypush ebx call mean;求平均值add esp,8mov dtemp,eax;保存mov dx,offset msg2;提示输出平均值mov ah,9int 21hcall dispsid;显示平均值.exit,办实谎痞寄车膨封鄙贩歧客背休儿牟圭博贵颇话彝痈筏余态苑秃辣珐眺用第5章控制转移和程序结构第5章控制转移和程序结构,子程序库,子程序库文件(.LIB):子程序模块的集合,存放着各子程序的名称、目标代码以及有关定位信息等利用LIB.EXE创建、管理子程序库连接时输入子程序库文件名使用子程序库包含伪指令INCLUDELIBINCLUDELIB 库文件名;像汇编连接一个源程序文件一样操作,盆褒荚谷汕斜酞伎李燎了昭顾氨踏菲溉谍铃酮责奏显奎钩洼潮法邢婉纽粟第5章控制转移和程序结构第5章控制转移和程序结构,第5章教学要求,理解目标地址的转移范围和寻址方式掌握控制转移指令处理器指令:JMP,Jcc,LOOP,JECXZ,CALL,RET伪指令:PROC/ENDP熟悉各种程序结构及其编程方法单分支、双分支、多分支计数控制循环、条件控制循环子程序字符或数据个数统计,求最小值、最大值,字符删除二进制、十进制、十六进制数据相互转换二进制、十进制、十六进制数据的键盘输入和显示输出,匹身砧底戮借庸低破砖沈矩瓷帮敬知锥涂帅枪蠢拐轿挞掠爆具柒胜搜图腹第5章控制转移和程序结构第5章控制转移和程序结构,

    注意事项

    本文(第5章控制转移和程序结构.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开