欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第六章 分支结构程序设计优秀PPT.ppt

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

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

    第六章 分支结构程序设计优秀PPT.ppt

    第六章第六章 分支结构程分支结构程序设计序设计第一页,本课件共有108页带着问题学习:1分支程序结构有哪几种?分支程序结构有哪几种?2都有哪些指令可以实现分支?都有哪些指令可以实现分支?3可以对二进制的某一位操作的指令有哪可以对二进制的某一位操作的指令有哪些?些?4.系统是如何把程序调入内存执行的?系统是如何把程序调入内存执行的?5.菜单程序如何设计菜单程序如何设计?第二页,本课件共有108页学习要点学习要点掌握分支结构程序设计方法掌握分支结构程序设计方法掌握与分支有关的转移指令掌握与分支有关的转移指令深入分析程序转移的特征深入分析程序转移的特征第三页,本课件共有108页任务任务1 如何将学生姓名字符串如何将学生姓名字符串“Zhang San”变成变成“ZHANG SAN”?任务任务2 如何计算下面函数的值:如何计算下面函数的值:任务任务3 如何判断某一年是否是闰年?如何判断某一年是否是闰年?任务任务4 给出一百分制成绩,如何输出相应的给出一百分制成绩,如何输出相应的A、B、C、D,E等级?等级?第四页,本课件共有108页第六章第六章 分支结构程序设计分支结构程序设计6.1 分支结构分支结构6.2 与分支有关的指令与分支有关的指令-控制转移类指令控制转移类指令6.2.1无条件转移类指令无条件转移类指令6.2.2条件转移类指令条件转移类指令6.2.3 与转移地址有关的寻址方式与转移地址有关的寻址方式6.3 分支结构程序设计举例分支结构程序设计举例第五页,本课件共有108页任务:任务:从键盘输入一个字符,判断该字符是否是从键盘输入一个字符,判断该字符是否是小写字母?如果是小写字母,请把它转换小写字母?如果是小写字母,请把它转换成大写字母输出,否则不转换,原样输出。成大写字母输出,否则不转换,原样输出。第六页,本课件共有108页Ch=z?显示字符显示字符否否是是否否是是将字符转换成大写将字符转换成大写是是否否是是输入一个字符输入一个字符chCh=a?Ch=z?显示字符显示字符否否将字符转换成大写将字符转换成大写第七页,本课件共有108页MOV AH,01HINT 21HCMP AL,aJB DISPLAYCMP AL,zJA DISPLAYSUB AL,20HDISPLAY:MOV DL,ALMOV AH,02HINT 21HCh=z?显示字符显示字符否否是是否否是是将字符转换成大写将字符转换成大写第八页,本课件共有108页1两路分支结构两路分支结构2多级分支结构多级分支结构3多路分支结构多路分支结构图示图示图示分支结构种类分支结构种类6.1 分支结构分支结构需要满足一定的条件,才能实现分支转移!需要满足一定的条件,才能实现分支转移!第九页,本课件共有108页6.2 控制转移类指令控制转移类指令控制转移类指令控制转移类指令用于实现分支、循环、过程等程序用于实现分支、循环、过程等程序结构,是仅次于传送结构,是仅次于传送指令的最常用指令指令的最常用指令 控控制制转转移移类类指指令令通通过过改改变变IP(和和CS)值值,实现程序执行顺序的改变实现程序执行顺序的改变第十三页,本课件共有108页控制转移类指令控制转移类指令无条件转移指令无条件转移指令JMP条件转移指令条件转移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ 循环指令循环指令 LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE 子程序调用和返回指令子程序调用和返回指令 CALL、RET中断与中断返回指令中断与中断返回指令 INT、INTO、IRET第十四页,本课件共有108页6.2.1 无条件转移指令无条件转移指令只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序转,就使程序转到指定的目标地址处,从目标地址处开始执到指定的目标地址处,从目标地址处开始执行那里的指令行那里的指令操作数操作数label是要转移到的是要转移到的目标地址目标地址(目的地目的地址址、转移地址转移地址)JMP指令分成指令分成4种类型:种类型:段内转移、直接寻址段内转移、直接寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段间转移、直接寻址 段间转移、间接寻址段间转移、间接寻址JMP label;程序转向label标号指定的地址JMPJMP第十五页,本课件共有108页用来确定用来确定转移指令转移指令及及CALL指令指令的转向地址。的转向地址。与转移地址有关的寻址方式:与转移地址有关的寻址方式:段内段内寻址寻址 段内直接段内直接寻址寻址 JMP NEAR PTR NEXT 段内间接段内间接寻址寻址 JMP TABLE BX 段间段间寻址寻址 段间直接段间直接寻址寻址 JMP FAR PTR NEXT 段间间接段间间接寻址寻址 JMP DWORD PTR BX 第十六页,本课件共有108页目标地址的寻址方式目标地址的寻址方式直接寻址方式直接寻址方式转移地址象立即数一样,直接在指令的机转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式器代码中,就是直接寻址方式间接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式过寄存器或存储器的间接寻址方式用标号表达用寄存器或存储器操作数表达第十七页,本课件共有108页目标地址的范围:段内目标地址的范围:段内段内转移段内转移近转移(近转移(near)在当前代码段在当前代码段64KB范围内转移(范围内转移(32KB范围)范围)不需要更改不需要更改CS段地址,段地址,只要改变只要改变IP偏偏移地址移地址段内转移段内转移短转移(短转移(short)转移范围可以用一个字节表达,在段转移范围可以用一个字节表达,在段内内128127范围的转移范围的转移代代码码段段代代码码段段第十八页,本课件共有108页目标地址的范围:段间目标地址的范围:段间段间转移段间转移远转移(远转移(far)从当前代码段跳转到另一个代码从当前代码段跳转到另一个代码段,可以在段,可以在1MB范围范围需要需要更改更改CS段地址和段地址和IP偏移地址偏移地址目标地址必须用一个目标地址必须用一个32位数表达,位数表达,叫做叫做32位远指针位远指针,它就是逻辑地,它就是逻辑地址址代代码码段段代代码码段段 实实际际编编程程时时,汇汇编编程程序序会会根根据据目目标标地地址址的的距距离离,自自动动处处理理成短转移、近转移或远转移成短转移、近转移或远转移 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强制第十九页,本课件共有108页段内转移、直接寻址段内转移、直接寻址JMP labelJMP label;IPIP+IPIP+位移量位移量位移量是紧接着位移量是紧接着JMP指令后的那条指令的偏移地址,到目指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移标指令的偏移地址的地址位移当向地址增大方向转移时,位移量为正;向地址减小方向转移当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负时,位移量为负jmp jmp againagain;转移到;转移到againagain处继续执行处继续执行again:again:dec cxdec cx;标号;标号againagain的指令的指令jmp jmp outputoutput;转向;转向outputoutputoutput:output:mov result,almov result,al;标号;标号outputoutput的指令的指令实际为相对寻址第二十页,本课件共有108页(1)段内直接寻址段内直接寻址转向的有效地址转向的有效地址=当前当前(IP)+位移量位移量(8bit/16bit)第二十一页,本课件共有108页例例:JMP NEAR PTR NEXT 近转移近转移 -32768 +32767 JMP SHORT NEXT 短转移短转移 -128 +127 第二十二页,本课件共有108页段内转移、间接寻址段内转移、间接寻址JMP r16/m16 JMP r16/m16;IPr16/m16IPr16/m16将一个将一个1616位寄存器或主存字单元内容送入位寄存器或主存字单元内容送入IPIP寄存器,作为新的指令指针,但不修改寄存器,作为新的指令指针,但不修改CSCS寄存寄存器的内容器的内容jmp axjmp ax;IPAXIPAXjmp word ptr 2000hjmp word ptr 2000h;IP2000hIP2000h第二十三页,本课件共有108页(2)段内间接寻址段内间接寻址 转向的有效地址转向的有效地址是一个寄存器或存储单元的内容。是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到)例:例:(BX)=1256H (SI)=528EH TABLE=20A2H (DS)=2000H (232F8H)=3280H (264E4H)=2450H JMP BX ;(IP)=1256H JMP TABLEBX JMP WORD PTR TABLEBX ;(IP)=3280H JMP BXSI JMP WORD PTR BXSI ;(IP)=2450H第二十四页,本课件共有108页段间转移、直接寻址段间转移、直接寻址JMP far ptr labelJMP far ptr label;IPlabelIPlabel的偏移地址的偏移地址;CSlabelCSlabel的段地址的段地址将标号所在段的段地址作为新的将标号所在段的段地址作为新的CS值,值,标号在该段内的偏移地址作为新的标号在该段内的偏移地址作为新的IP值;这值;这样,程序跳转到新的代码段执行样,程序跳转到新的代码段执行jmp far ptr othersegjmp far ptr otherseg;远转移到代码段;远转移到代码段2 2的的othersegotherseg第二十五页,本课件共有108页code1 segment jmp far ptr next code1 endscode2 segment next:.code2 ends(3)段间直接寻址段间直接寻址 用指令中提供的用指令中提供的转向段地址转向段地址和和偏移地址偏移地址取代取代CS 和和 IP。例例:第二十六页,本课件共有108页段间转移、间接寻址段间转移、间接寻址JMP far ptr memJMP far ptr mem;IPmemIPmem,CSmem+2CSmem+2用一个双字存储单元表示要跳转的目标地用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个址。这个目标地址存放在主存中连续的两个字单元中的,低位字送字单元中的,低位字送IPIP寄存器,高位字送寄存器,高位字送CSCS寄存器寄存器mov word ptr bx,0mov word ptr bx,0mov word ptr bx+2,1500hmov word ptr bx+2,1500hJMP far ptr bx JMP far ptr bx ;转移到;转移到1500h:01500h:0第二十七页,本课件共有108页(4)段间间接寻址段间间接寻址 用存储器中的两个相继字的内容取代用存储器中的两个相继字的内容取代CS 和和 IP。(存储单元的地址可用除立即数和寄存器以外的存储单元的地址可用除立即数和寄存器以外的 任何一种数据寻址方式得到任何一种数据寻址方式得到)例:例:JMP DWORD PTR INTERS+BX第二十八页,本课件共有108页无条件转移指令无条件转移指令段内段内直接短转移:直接短转移:JMP SHORT OPR执行操作:(IP)(IP)+8 位位移量段内段内直接近转移:直接近转移:JMP NEAR PTR OPR执行操作:(IP)(IP)+16 位位移量段内段内间接转移:间接转移:JMP WORD PTR OPR执行操作:(IP)(EA)第二十九页,本课件共有108页无条件转移指令无条件转移指令段间段间直接远转移直接远转移 JMP FAR PTR OPR 执行操作:执行操作:(IP)OPR 的段内偏移地址的段内偏移地址 (CS)OPR 所在段的段地址所在段的段地址段间段间间接转移:间接转移:JMP DWORD PTR OPR执行操作:执行操作:(IP)(EA)(CS)(EA+2)第三十页,本课件共有108页6.2.2 条件转移指令条件转移指令指定的条件指定的条件cc如果成立,程序转移到由标如果成立,程序转移到由标号号label指定的目标地址去执行指令;条件指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令不成立,则程序将顺序执行下一条指令操作数操作数label是采用短转移,称为相对寻址是采用短转移,称为相对寻址方式方式JccJccJcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行第三十一页,本课件共有108页相对寻址方式相对寻址方式Jcc指令的操作数指令的操作数label是一个标号是一个标号一个一个8位位移量,表示位位移量,表示Jcc指令后的那条指令的指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移偏移地址,到目标指令的偏移地址的地址位移8位位移量是位位移量是相对于相对于当前当前IP的,且距当前的,且距当前IP地地址址128127个单元的范围之内,属于段内个单元的范围之内,属于段内短距离转移短距离转移Jcc目标地址就采用这种目标地址就采用这种相对寻址方式相对寻址方式Jcc指令为指令为2个字节,条件不满足时的顺序个字节,条件不满足时的顺序执行就是当前指令偏移指针执行就是当前指令偏移指针IP加加2JccJcc第三十二页,本课件共有108页Jcc指令的分类指令的分类Jcc指令不影响标志,但要利用标志(表指令不影响标志,但要利用标志(表2.2)。根据利用的标志位不同,)。根据利用的标志位不同,16条指令条指令分成分成3种情况:种情况:1.判断单个标志位状态判断单个标志位状态2.比较无符号数高低比较无符号数高低3.比较有符号数大小比较有符号数大小JccJcc第三十三页,本课件共有108页(1)根据根据单个条件标志单个条件标志的设置情况转移的设置情况转移 格式格式 测试条件测试条件JZ(JE)OPR ZF=1JZ(JE)OPR ZF=1JNZ(JNE)OPR ZF=0JNZ(JNE)OPR ZF=0JS OPR SF=1JS OPR SF=1JNS OPR SF=0JNS OPR SF=0JO OPR OF=1JO OPR OF=1JNO OPR OF=0JNO OPR OF=0JP OPR PF=1JP OPR PF=1JNP OPR PF=0JNP OPR PF=0JC OPR CF=1JC OPR CF=1JNC OPR CF=0JNC OPR CF=0条件转移指令条件转移指令条件转移指令条件转移指令:(只能使用段内直接寻址的只能使用段内直接寻址的只能使用段内直接寻址的只能使用段内直接寻址的 8 8 位位移量位位移量位位移量位位移量 )第三十四页,本课件共有108页 (2)比较比较两个两个无符号数无符号数无符号数无符号数,并根据比较结果转移,并根据比较结果转移*格式格式 测试条件测试条件=JNB(JAE,JNC)OPR CF=0 JNBE(JA)OPR CF ZF=0*适用于地址或双精度数低位字的比较适用于地址或双精度数低位字的比较第三十五页,本课件共有108页(3)比较比较两个两个带符号数带符号数,并根据比较结果转移并根据比较结果转移 *格式格式 测试条件测试条件=JNL(JGE)OPR SF JNL(JGE)OPR SF OF=0OF=0=JNLE(J JNLE(JG G)OPR (SF)OPR (SF OF)OF)ZF=0ZF=0适用于带符号数的比较适用于带符号数的比较(4)测试测试CXCX的值,为的值,为0 0则转移则转移 格式格式 测试条件测试条件 JCXZ OPR (CX)=0JCXZ OPR (CX)=0第三十六页,本课件共有108页1.判断单个标志位状态判断单个标志位状态这组指令单独判断这组指令单独判断5个状态标志之一个状态标志之一JZ/JE和和JNZ/JNE:利用零标志:利用零标志ZF,判断结果是否为,判断结果是否为零(或相等)零(或相等)JS和和JNS:利用符号标志:利用符号标志SF,判断结果是正是负,判断结果是正是负JO和和JNO:利用溢出标志:利用溢出标志OF,判断结果是否产生溢,判断结果是否产生溢出出JP/JPE和和JNP/JPO:利用奇偶标志:利用奇偶标志PF,判断结果,判断结果中中“1”的个数是偶是奇的个数是偶是奇JC/JB/JNAE和和JNC/JNB/JAE:利用进位标志:利用进位标志CF,判断结果是否进位或借位,判断结果是否进位或借位JccJcc例题例题3.32例题例题3.33例题例题3.34例题例题3.35例题例题3.36第三十八页,本课件共有108页2.比较无符号数高低比较无符号数高低无符号数的大小用高(无符号数的大小用高(Above)低)低(Below)表示)表示利用利用CF确定高低、利用确定高低、利用ZF标志确定相等标志确定相等(Equal)两数的高低分成两数的高低分成4种关系:种关系:低于(不高于等于):低于(不高于等于):JB(JNAE)不低于(高于等于):不低于(高于等于):JNB(JAE)低于等于(不高于):低于等于(不高于):JBE(JNA)不低于等于(高于):不低于等于(高于):JNBE(JA)JccJcc第四十五页,本课件共有108页例6.7a:比较无符号数cmp ax,bxcmp ax,bx;比较;比较axax和和bxbxjnb nextjnb next;若;若axaxbxbx,转移,转移xchg ax,bxxchg ax,bx;若;若axaxbxbx,交换,交换next:next:.结果:AX保存较大的无符号数第四十六页,本课件共有108页3.比较有符号数大小比较有符号数大小有符号数的大(有符号数的大(Greater)小()小(Less)需要组合)需要组合OF、SF标志,并利用标志,并利用ZF标志确定相等(标志确定相等(Equal)两数的大小分成两数的大小分成4种关系:种关系:小于(不大于等于):小于(不大于等于):JL(JNGE)不小于(大于等于):不小于(大于等于):JNL(JGE)小于等于(不大于):小于等于(不大于):JLE(JNG)不小于等于(大于):不小于等于(大于):JNLE(JG)JccJcc第四十七页,本课件共有108页例6.7b:比较有符号数cmp ax,bxcmp ax,bx;比较;比较axax和和bxbxjnl nextjnl next;若;若axaxbxbx,转移,转移xchg ax,bxxchg ax,bx;若;若axaxbxbx,交换,交换next:next:.结果:AX保存较大的有符号数第四十八页,本课件共有108页JCXZ指令JCXZ label;CX0,转移到标号label第四十九页,本课件共有108页例6.8:记录空格个数mov cx,countmov cx,count;设置循环次数;设置循环次数mov si,offset stringmov si,offset stringxor bx,bxxor bx,bx;bxbx0 0,记录空格数,记录空格数jcxz donejcxz donemov al,20hmov al,20h;如果长度为;如果长度为0 0,退出,退出again:again:cmp al,es:sicmp al,es:sijnz nextjnz next;ZFZF0 0非空格,转移非空格,转移inc bxinc bx;ZF=1ZF=1是空格,个数加是空格,个数加1 1next:next:inc siinc siloop againloop again;字符个数减;字符个数减1 1,不为,不为0 0继续循环继续循环dec cxjnz againcmp cx,0jz next第五十页,本课件共有108页例例6-9:如如果果 X 50,转转到到 TOO_HIGH;计计算算 X-Y,如如果果溢溢出出 转到转到 OVERFLOW,否则,否则|X-Y|RESULT JGJGJOJOJNSJNS MOV AX,XCMP AX,50 TOO_HIGHSUB AX,Y OVERFLOW NONNEGNEG AX NONNEG:MOV RESULT,AXTOO_HIGH:OVERFLOW:第五十一页,本课件共有108页例例6-10:、是是双双精精度度数数,分分别别存存于于 DX,AX 及及 BX,CX 中,中,时转时转 L1,否则转,否则转 L2 CMP DX,BX JG L1 JL L2 CMP AX,CX JA L1L2:L1:第五十二页,本课件共有108页单分支程序设计方法单分支程序设计方法根据条件标志位或结果根据条件标志位或结果实现分支转移实现分支转移,否则按否则按指令顺序继续执行指令顺序继续执行if(flag=1)转移;)转移;JZ/JC/JS/JO/JP/JBIf (flag=0)转移;转移;JNZ/JNC/JNS/JNO/JNP/JNB条件是否满足?条件是否满足?否否是是目的程序段目的程序段共有程序段共有程序段第五十三页,本课件共有108页双分支程序设计方法双分支程序设计方法如果(条件满足如果(条件满足)则执则执行程序段行程序段1,否则执行,否则执行程序段程序段2注意程序段注意程序段1和程序段和程序段2的位置的位置注意程序段的出口注意程序段的出口条件是否满足条件是否满足执行程序段执行程序段1执行程序段执行程序段2否否是是共有程序段共有程序段跳转!跳转!第五十四页,本课件共有108页例例6-11.从键盘输入一个小写字母,将其换成大写从键盘输入一个小写字母,将其换成大写字母,输出字母,输出2.如果任务如果任务1中允许用户中允许用户多次测试字符多次测试字符,如,如何修改何修改?3.从键盘从键盘任意输入一个字符任意输入一个字符,判断判断该字符是该字符是否是小写字母?如果是小写字母,请把它否是小写字母?如果是小写字母,请把它转换成大写字母输出,否则不转换,原样转换成大写字母输出,否则不转换,原样输出。输出。第五十五页,本课件共有108页MOV AH,01H;完成单个字符输入;完成单个字符输入INT 21HBEGIN:程序运行能结束吗?程序运行能结束吗?CMP AL,1BH JZ EXITCMP AL,a ;判断字符是否为小写字母?;判断字符是否为小写字母?JB DISPLAYCMP AL,zJA DISPLAYSUB AL,20H ;完成小写字母转换成大写;完成小写字母转换成大写DISPLAY:MOV DL,AL ;完成单个字符的显示输出;完成单个字符的显示输出MOV AH,02HINT 21HJMP BEGINMOV AH,4CH ;程序返回;程序返回INT 21HEXIT:第五十六页,本课件共有108页6.3分支程序实例分支程序实例例例6-11设设A、B、C三个单元存放着三个数,三个单元存放着三个数,若三个数都不为若三个数都不为0,则求三数之和放在,则求三数之和放在D单单元内,若其中有一个为元内,若其中有一个为0,则将另外两个也,则将另外两个也清清0。分析:此题为判断分析:此题为判断A、B、C三个数是否为三个数是否为0的分支程序。存贮单元的分配,题目已告的分支程序。存贮单元的分配,题目已告诉,变量名分别为诉,变量名分别为A、B、C、D,都为字变,都为字变量。量。第五十七页,本课件共有108页STACKSEGMENTSTACKDB 200 DUP(0)STACKENDSDATASEGMENTADW aBDW bCDW cDDW?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX,DATAMOV DS,AXCMP A,0JZ L1CMP B,0JZ L1CMP C,0JZ L1MOV AX,AADD AX,BADD AX,CMOV D,AXEXIT:MOV AH,4CHINT 21HL1:MOV A,0MOV B,0MOV C,0JMP EXITCODEENDSEND BEGINNYYNYNa=0?b=0?c=0?a+b+cDa、b、c清0开始结束第五十八页,本课件共有108页6.3分支程序实例分支程序实例例例6-12设计分支程序,实现下列公式计算。假设设计分支程序,实现下列公式计算。假设X数组中保存三个数组中保存三个16位带符号数:位带符号数:9,-6,34,根,根据它们不同的值,分别进行函数值据它们不同的值,分别进行函数值Y的计算,存的计算,存入入Y数组中。数组中。第五十九页,本课件共有108页设计思路:1.在数据段中定义数组在数据段中定义数组X、Y,均为带符号,均为带符号数;数;2.在在X单元中分别取出三个数据作判断,根单元中分别取出三个数据作判断,根据据X的大小作分支转移;的大小作分支转移;3.采用寄存器相对寻址方式采用寄存器相对寻址方式(MOV AX,XSI)分别取出分别取出X的三个值;的三个值;4.标号标号OUT1是各路分支的公共出口。是各路分支的公共出口。第六十页,本课件共有108页程序框图:第六十一页,本课件共有108页程序如下:;6-11.asm 用正常程序格式编写分支程序用正常程序格式编写分支程序DATA SEGMENTX DW 9,-6,34Y DW 3 dup(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,3;循环三次;循环三次MOV SI,0LET0:MOV AX,XSI;取出;取出XCMP AX,0;X 0?JGE LET1;是,转到;是,转到let1MOV BX,AX;否,计算;否,计算X*XIMUL BXJMP OUT;跳到公共出口;跳到公共出口out1第六十二页,本课件共有108页LET1:CMP AX,10;X 10?JGE LET2;是,转到;是,转到let2SAL AX,1;否,计算;否,计算2X+3ADD AX,3JMP OUT;跳到公共出口;跳到公共出口out1LET2:MOV BL,6;计算;计算X/6IDIV BL;商在;商在al,余数在,余数在ahOUT:MOV YSI,AX;保存;保存YADD SI,2DEC CX;CX-1CMP CX,0JNZ LET0;CX0转移到转移到let0MOV AH,4CH;CX=0,程序结束,程序结束INT 21HCODE ENDSEND START返回第六十三页,本课件共有108页运行结果:运行结果:在在DOS下执行程序下执行程序5-1.exe后又返回到后又返回到DOS,没,没有显示。要观察运行结果,采用有显示。要观察运行结果,采用DEBUG执行执行5-1.exe。在。在DEBUG下,用下,用U命令查看,找到断命令查看,找到断点点0039,用,用G 0039执行,再用执行,再用D命令查看结命令查看结果果。第六十四页,本课件共有108页设计思路:设计思路:(1)用用TEST测试指令来区分数字和字母:测试指令来区分数字和字母:数字的数字的ASCII码:码:30H39H 00110000B00111001B大写字母的大写字母的ASCII码:码:41H5AH 01000001B01011010B小写字母的小写字母的ASCII码:码:61H7AH 01100001B01111010B例例6-12 从从键键盘盘输输入入一一串串字字符符,如如果果是是数数字字存存入入NUMB单单元元,如如果果是是字字母母,将将大大写写字字母母存存入入CAPI单单元元,小小写写字字母母存入存入LETT单元,分别统计个数,输入回车时退出。单元,分别统计个数,输入回车时退出。第六十五页,本课件共有108页数字和字母的第数字和字母的第6位不同。因此,区别数字和字母用位不同。因此,区别数字和字母用TEST AL,40H:第:第6位为位为0是数字,第是数字,第6位为位为1 则为字母。则为字母。大小写字母为第大小写字母为第5位不同。区别大小写字母用位不同。区别大小写字母用TEST AL,20H:第第5位为位为0是大写字母,第是大写字母,第5位为位为1则为小写字母。则为小写字母。用用CMP指令排除其它字符;指令排除其它字符;数字、大写字母、小写字母的个数分别放在数字、大写字母、小写字母的个数分别放在DI、SI、BX中。中。第六十六页,本课件共有108页程序如下:data segment numb db 10 dup(?)capi db 10 dup(?)lett db 10 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlet0:mov ah,1;键盘输入键盘输入int 21hcmp al,0dh;回车回车?jz exit;是,转是,转EXITtest al,40h;区分数字和字母区分数字和字母jz digit;排除字母,可能是数字,转排除字母,可能是数字,转digittest al,20h;区分大小写字母区分大小写字母jz char1;是大写,转是大写,转CHAR1mov lettbx,alinc bx;小写个数加小写个数加1 jmp let0第六十七页,本课件共有108页char1:cmp al,5ah;排除大小写之间的字符排除大小写之间的字符 ja exit mov capisi,al inc si;大写个数加大写个数加1 jmp let0digit:cmp al,0;排除其它字符排除其它字符 jb exit cmp al,9 ja exitmov numbdi,al ;是数字;是数字inc di;数字个数加数字个数加1jmp let0exit:mov ah,4chint 21hcode endsend start第六十八页,本课件共有108页运行结果:运行结果:在在DEBUG下执行:下执行:第六十九页,本课件共有108页多分支程序设计方法多分支程序设计方法方法方法1 设计多路分支,通过设计多路分支,通过条件控制条件控制在程序在程序中直接使用控制转移指令实现多分支跳转中直接使用控制转移指令实现多分支跳转方法方法2 组建组建分支表分支表,实现各分支跳转,实现各分支跳转2-1建立转移地址表建立转移地址表2-2建立转移指令表建立转移指令表方法方法3 设计逻辑尺设计逻辑尺第七十页,本课件共有108页菜单程序设计菜单程序设计例例6-13设计菜单程序。实现三个功能:设计菜单程序。实现三个功能:1、小写字母转换为大写、小写字母转换为大写2、计算立方值、计算立方值3、退出、退出设计思路:设计思路:(1 1)在数据段中定义菜单。每行换行显示;)在数据段中定义菜单。每行换行显示;(2 2)用用9号功能显示菜单;号功能显示菜单;(3 3)根据输入选择执行某段程序。)根据输入选择执行某段程序。第七十一页,本课件共有108页运行结果:运行结果:第七十二页,本课件共有108页data segmentmsg0 db 0ah,0dh,1.input string db 0ah,0dh,2.calculate cube db 0ah,0dh,3.exit db 0ah,0dh,select:$msg1 db 0ah,0dh,input:$msg2 db 0ah,0dh,output:$buff db 10,?,10 dup(?)x db?,?,?data ends程序如下:程序如下:第七十三页,本课件共有108页code segmentassume cs:code,ds:datastart:mov ax,data mov ds,axlet0:mov dx,offset msg0;显示菜单显示菜单 mov ah,9 int 21h mov ah,1;输入选择输入选择 int 21h cmp al,1 je prog1 cmp al,2 je prog2 jmp prog3;按其它键均退出按其它键均退出 第七十四页,本课件共有108页prog1:;菜单菜单1;6-1.asm 程序部分程序部分;输入英文单词输入英文单词,将小写字母转换为大写将小写字母转换为大写;jmp let0;返回主菜单返回主菜单prog2:;菜单菜单2;6-2.asm 程序部分程序部分;计算计算0-9立方值立方值;jmp let0;返回主菜单返回主菜单prog3:;菜单菜单3.退出退出mov ah,4chint 21hcode endsend start设计多路分支完成,用控制转移类指令实现跳转!设计多路分支完成,用控制转移类指令实现跳转!方法方法1第七十五页,本课件共有108页方法2 用分支表实现多路转移 所所谓谓分分支支表表是是在在数数据据段段中中建建立立一一个个表表,表表中中存存放放要要转转移移的的程程序序段段的的名名字字(标标号号),也也就就是是偏偏移移地地址址,称称之之为为分分支支表表。在在程程序序中中访访问问这这个个分分支支表表,取取得得程程序序段段名名字字,就就可以转移到相应的标号去执行。可以转移到相应的标号去执行。例例6-12 用分支表设计多路分支用分支表设计多路分支 1.计算并显示计算并显示z=x+y,2.将输入的字母改变大小写将输入的字母改变大小写,0.退出退出第七十六页,本课件共有108页用分支表设计多路分支用分支表设计多路分支方法方法2-1(建立转移地址表)(建立转移地址表)(建立转移地址表)(建立转移地址表)1.计算并显示计算并显示z=x+y,2.将输入的字母改变大小写将输入的字母改变大小写,0.退出退出设计思路:设计思路:1.在数据段中建立分支表在数据段中建立分支表TABLE,保存分支转移的标号,保存分支转移的标号2.根据键盘输入的根据键盘输入的02,计算分支标号在,计算分支标号在TABLE表中的地址表中的地址3.采用采用JMP TABLEBX,实现多路转移。,实现多路转移。第七十七页,本课件共有108页数据段定义数据段定义DATA SEGMENTTABLE DW prog0,prog1,prog2,prog0;分支表分支表MESS1 DB 0ah,0dh,input0-2:$MESS2 DB 0ah,0dh,z=x+y=$X DB 3 Y DB 6Z DB?DATA ENDS第七十八页,本课件共有108页code segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlet0:mov dx,offset mess1;显示输入信息显示输入信息mov ah,9int 21hmov ah,1int 21hand al,03hmov ah,0shl ax,1 ;计算分支表地址计算分支表地址mov bx,axjmp tablebx;按分支表转移按分支表转移;tablebxIP JMP TABLEBXSI注意:此程序输入注意:此程序输入12,将走向相应的分,将走向相应的分支;支;输入输入0或或3,将走,将走prog0;若输入若输入49,则走向余,则走向余4后相应的分支。后相应的分支。比如输入比如输入5,则走向,则走向prog1分支。分支。第七十九页,本课件共有108页prog1:mov dx,offset mess2;显示输出信息显示输出信息mov ah,9int 21hmov al,xadd al,ymov z,al;z=x+yadd al,30hmov dl,almov ah,2int 21hjmp let0prog2:mov dl,0ah;光标在下一行光标在下一行mov ah,2int 21hmov ah,1int 21htest al,20hjz transfer;是大写转是大写转and al,0dfh;小写变为大写小写变为大写jmp

    注意事项

    本文(第六章 分支结构程序设计优秀PPT.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开