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

    循环与分支设计.ppt

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

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

    循环与分支设计.ppt

    第五章第五章 循环与分支程序设计循环与分支程序设计5.1 循环与转移指令循环与转移指令5.2 循环程序设计循环程序设计5.3 分支程序设计分支程序设计1编写汇编语言程序步骤1 分析题意,确定算法分析题意,确定算法2 根据算法,画出程序流程图根据算法,画出程序流程图3 根据框图编写程序根据框图编写程序4 上机调试程序上机调试程序25.1 循环与转移指令循环与转移指令一、循环控制指令一、循环控制指令二、转移指令二、转移指令 控控制制转转移移类类指指令令通通过过改改变变IP(和和CS)值值,实现程序执行顺序的改变实现程序执行顺序的改变3一、循环控制指令一、循环控制指令w8086指令系统的循环控制指令均为二字节指令系统的循环控制指令均为二字节指令指令n一字节为转移的相对位移量(一字节为转移的相对位移量(8位带符号的二位带符号的二进制数)进制数)IP IP+相对位移量相对位移量n隐含使用隐含使用CX作为循环计数器作为循环计数器程程序序中中的的某某段段需需反反复复执执行行若若干干次次时时,用用循环来实现循环来实现小范围转移小范围转移4一、循环控制指令一、循环控制指令LOOP label;CXCX1,CX0,循环到标号循环到标号labelLOOPE/LOOPZ label;CXCX1,CX0 且且ZF1,循环到标号循环到标号labelLOOPNE/NZ label;CXCX1,CX0且且ZF0,循环到标号循环到标号label等于时循环等于时循环不等于时循环不等于时循环5一、循环控制指令一、循环控制指令(例)(例)mov cx,countmov cx,count;设置循环次数设置循环次数mov si,offset stringmov si,offset stringxor bx,bxxor bx,bx;bxbx清清0 0,用于记录空格数,用于记录空格数mov al,20hmov al,20hagain:again:cmp al,sicmp al,sijnz nextjnz next;ZF=0ZF=0,非空格,转移非空格,转移inc bxinc bx;ZF=1ZF=1,是空格,个数加是空格,个数加1 1next:next:inc siinc siloop againloop again;计数器减计数器减1 1,不为,不为0 0继续循环继续循环dec cxjnz again6二、转移指令二、转移指令1.无条件转移指令无条件转移指令2.条件转移指令条件转移指令71.无条件转移指令无条件转移指令JMP labelJMP label;程序转向程序转向labellabel标号指定的地址标号指定的地址NEARFARw只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序转到指定就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令的目标地址处,从目标地址处开始执行那里的指令wJMP指令分成指令分成4种类型:种类型:段内转移、直接寻址段内转移、直接寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段间转移、直接寻址 段间转移、间接寻址段间转移、间接寻址目的地址与目的地址与JMP属同一属同一逻辑段,只修改逻辑段,只修改IP值值从一个代码段转移到另一个代从一个代码段转移到另一个代码段,码段,CS和和IP都会被修改都会被修改81.无条件转移指令无条件转移指令目标地址的寻址方式目标地址的寻址方式w直接寻址方式直接寻址方式n转移地址象立即数一样,直接在指令的转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式机器代码中,就是直接寻址方式w间接寻址方式间接寻址方式n转移地址在寄存器或主存单元中,就是转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式通过寄存器或存储器的间接寻址方式用标号表达用标号表达用寄存器或存储用寄存器或存储器操作数表达器操作数表达91.无条件转移指令无条件转移指令目标地址的范围:段内目标地址的范围:段内w段内转移段内转移近转移(近转移(near)n在当前代码段在当前代码段64KB范围内转移(范围内转移(32KB范围)范围)n不需要更改不需要更改CS段段基值基值,只要改变,只要改变IP偏移地址偏移地址w段内转移段内转移短转移(短转移(short)n转移范围可以用一个字节表达,转移范围可以用一个字节表达,在段内在段内128127范围的转移范围的转移代代码码段段代代码码段段101.无条件转移指令无条件转移指令目标地址的范围:段间目标地址的范围:段间w段间转移段间转移远转移远转移(far)n从当前代码段跳转到另一个从当前代码段跳转到另一个代码段,可以在代码段,可以在1MB范围范围n需要更改需要更改CS段段基值基值和和IP偏移偏移地址地址n目标地址必须用一个目标地址必须用一个32位数位数表达,叫做表达,叫做32位远指针,它位远指针,它就是逻辑地址就是逻辑地址代代码码段段代代码码段段 实实际际编编程程时时,汇汇编编程程序序会会根根据据目目标标地地址址的的距距离离,自动处理成短转移、近转移或远转移自动处理成短转移、近转移或远转移 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强制11段内直接寻址转移段内直接寻址转移JMP labelJMP label;IPIP+IPIP+位移量位移量w位移量是紧接着位移量是紧接着JMP指令后的那条指令的偏移地址指令后的那条指令的偏移地址到目标指令的偏移地址的地址差到目标指令的偏移地址的地址差w当向地址增大方向转移时,位移量为正;向地址减当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负小方向转移时,位移量为负实际为相对寻址实际为相对寻址again:again:dec cxdec cx;标号标号againagain的指令的指令 jmp again jmp again ;转移到转移到againagain处继续执行处继续执行jmp outputjmp output;转向转向outputoutputoutput:output:mov result,almov result,al;标号标号outputoutput的指令的指令12段内间接寻址转移段内间接寻址转移JMP r16/m16JMP r16/m16 ;IPr16/m16IPr16/m16w将一个将一个1616位寄存器或主存字单元内容送入位寄存器或主存字单元内容送入IPIP寄存器,作为新的指令指针,但不修改寄存器,作为新的指令指针,但不修改CSCS寄存器的内容寄存器的内容jmp axjmp ax;IPAXIPAXjmp word ptr bxjmp word ptr bx;IPBXIPBX13段间直接寻址转移段间直接寻址转移JMP far ptr labelJMP far ptr label;IPlabelIPlabel的偏移地址的偏移地址;CSlabelCSlabel的段基值的段基值w将标号所在段的段将标号所在段的段基值基值作为新的作为新的CS值,标值,标号在该段内的偏移地址作为新的号在该段内的偏移地址作为新的IP值;程值;程序跳转到新的代码段执行序跳转到新的代码段执行jmp far ptr othersegjmp far ptr otherseg;远转移到代码段远转移到代码段2 2的的othersegotherseg14段间间接寻址转移段间间接寻址转移JMP far ptr memJMP far ptr mem;IPmemIPmem,CSmem+2CSmem+2w用一个双字存储单元表示要跳转的目标地址。用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元这个目标地址存放在主存中连续的两个字单元中的,低位字送中的,低位字送IPIP寄存器,高位字送寄存器,高位字送CSCS寄存器寄存器mov word ptr bx,0mov word ptr bx,0mov word ptr bx+2,1500hmov word ptr bx+2,1500hJMP far ptr bxJMP far ptr bx ;转移到转移到15001500h:0h:0152.条件转移指令条件转移指令Jcc labelJcc label ;条件满足,发生转移:条件满足,发生转移:IPIPIPIP8 8位位移量位位移量 ;条件不满足,顺序执行;条件不满足,顺序执行指指定定的的条条件件cc如如果果成成立立,程程序序转转移移到到由由标标号号label指指定定的的目目标标地地址址去去执执行行指指令令;条条件件不成立,则程序将顺序执行下一条指令不成立,则程序将顺序执行下一条指令操操作作数数label是是采采用用短短转转移移,称称为为相相对对寻寻址址方式方式162.条件转移指令条件转移指令wJcc指令的操作数指令的操作数label是一个标号是一个标号n一个一个8位位移量是相对于当前位位移量是相对于当前IP的,且距当前的,且距当前IP地址地址128127个单元的范围之内,属个单元的范围之内,属于段内短距离转移于段内短距离转移wJcc指令为指令为2个字节,条件不满足时的顺序个字节,条件不满足时的顺序执行就是当前指令偏移指针执行就是当前指令偏移指针IP加加2172.条件转移指令条件转移指令指令的分类指令的分类wJcc指令不影响标志,但要利用标志。指令不影响标志,但要利用标志。w根据利用的标志位不同,根据利用的标志位不同,19条指令分条指令分成成4种情况:种情况:判断单个标志位状态判断单个标志位状态 比较无符号数高低比较无符号数高低 比较有符号数大小比较有符号数大小 判断计数器判断计数器CX为为0182.条件转移指令条件转移指令无符号数的比较无符号数的比较无符号数的大小用高(无符号数的大小用高(Above)低(低(Below)表表示示利用利用CF确定高低、利用确定高低、利用ZF标志确定相等标志确定相等(Equal)两数的高低分成两数的高低分成4种关系:种关系:高于(不低于等于):高于(不低于等于):JA(JNBE)高于等于(不低于):高于等于(不低于):JAE(JNB)低于(不高于等于):低于(不高于等于):JB(JNAE)低于等于(不高于):低于等于(不高于):JBE(JNA)192.条件转移指令条件转移指令有符号数的比较有符号数的比较w有符号数的大(有符号数的大(Greater)小(小(Less)需要需要组合组合OF、SF标志,并利用标志,并利用ZF标志确定相标志确定相等(等(Equal)w两数的大小分成两数的大小分成4种关系:种关系:小于(不大于等于):小于(不大于等于):JL(JNGE)小于等于(不大于):小于等于(不大于):JLE(JNG)大于(不小于等于):大于(不小于等于):JG(JNLE)大于等于(不小于):大于等于(不小于):JGE(JNL)20助记符助记符标志位标志位助记符助记符标志位标志位JCCF=1JA/JNBECF=0且且ZF=0JNCCF=0JAE/JNBCF=0或或ZF=1JZ/JEZF=1JB/JNAECF=1且且ZF=0JNZ/JNEZF=0JBE/JNACF=1或或ZF=1JSSF=1JG/JNLESF=OF且且ZF=0JNSSF=0JGE/JNLSF=OF或或ZF=1JP/JPEPF=1JL/JNGESFOF且且ZF=0JNP/JPOPF=0JLE/JNGSFOF或或ZF=1JOOF=1JCXZCX=0JNOOF=0 实际虽然指令只有实际虽然指令只有19条,但却有条,但却有31个助记符个助记符 采用多个助记符,只是为了方便记忆和使用采用多个助记符,只是为了方便记忆和使用21判断单个标志位状态判断单个标志位状态w这组指令单独判断这组指令单独判断5个状态标志之一个状态标志之一JZ/JE和和JNZ/JNE:利用零标志利用零标志ZF,判断结果判断结果是否为零(或相等)是否为零(或相等)JS和和JNS:利用符号标志利用符号标志SF,判断结果是正是判断结果是正是负负JO和和JNO:利用溢出标志利用溢出标志OF,判断结果是否产判断结果是否产生溢出生溢出JP/JPE和和JNP/JPO:利用奇偶标志利用奇偶标志PF,判断结判断结果中果中“1”的个数是偶是奇的个数是偶是奇JC和和JNC:利用进位标志利用进位标志CF,判断结果是否进判断结果是否进位或借位位或借位例例 题题例例 题题例例 题题例例 题题例例 题题 222.条件转移指令条件转移指令 JZ/JNZ指令指令 mov cx,0mov cx,0 mov bx,addr mov bx,addr mov ax,bx mov ax,bxrepeat:test ax,0ffffhrepeat:test ax,0ffffh jz exit jz exit jns shift jns shift inc cx inc cxshift:shl ax,1shift:shl ax,1 jmp repeat jmp repeatexit:mov count,cx exit:mov count,cx 232.条件转移指令条件转移指令 JS/JNS指令指令w计算计算|XY|(绝对值)。绝对值)。X和和Y为存放于为存放于X单元单元和和Y单元的单元的16位操作数,结果存入位操作数,结果存入result。mov ax,Xmov ax,Xsub ax,Ysub ax,Yjns nonnegjns nonnegneg axneg axnonneg:nonneg:mov result,axmov result,ax242.条件转移指令条件转移指令 JO/JNO指令指令w计算计算XY。X和和Y为存放于为存放于X单元和单元和Y单元的单元的16位操作数,若溢出,则转移到位操作数,若溢出,则转移到overflow处理处理mov ax,Xmov ax,Xsub ax,Ysub ax,Yjo overflowjo overflow.;无溢出,结果正确无溢出,结果正确overflow:overflow:.;有溢出处理有溢出处理252.条件转移指令条件转移指令 JP/JNP指令指令w设字符的设字符的ASCII码在码在AL寄存器中。将字符加上寄存器中。将字符加上奇校验位:在字符奇校验位:在字符ASCII码中为码中为“1”的个数为的个数为奇数时令其最高位为奇数时令其最高位为“0”,否则令最高位为,否则令最高位为“1”and al,7fhand al,7fh;最高位置最高位置“0”“0”,同时判断,同时判断“1”“1”的的个数个数jnp nextjnp next;个数已为奇数,则转向个数已为奇数,则转向nextnextor al,80hor al,80h;否则,最高位置否则,最高位置“1”“1”next:next:.262.条件转移指令条件转移指令 JC/JNC指令指令w记录记录BX中中1的个数的个数xor al,alxor al,al;ALAL0 0,CFCF0 0again:again:test bx,0ffffhtest bx,0ffffh ;等价于等价于 cmp bx,0cmp bx,0jz nextjz nextshl bx,1shl bx,1jnc againjnc againinc alinc aljmp againjmp againnext:next:.;ALAL保存保存1 1的个数的个数272.条件转移指令条件转移指令无符号数的比较(例)无符号数的比较(例)cmp ax,bxcmp ax,bx;比较比较axax和和bxbxjae nextjae next;若若axaxbxbx,转移转移xchg ax,bxxchg ax,bx;若若axaxbxbx,交换交换next:next:.结果:结果:AX保存较大的无符号数保存较大的无符号数282.条件转移指令条件转移指令有符号数的比较(例)有符号数的比较(例)cmp ax,bxcmp ax,bx;比较比较axax和和bxbxjge nextjge next;若若axaxbxbx,转移转移xchg ax,bxxchg ax,bx;若若axaxbxbx,交换交换next:next:.结果:结果:AX保存较大的有符号数保存较大的有符号数292.条件转移指令条件转移指令计数器计数器CX为为0转移转移JCXZ labelJCXZ label ;CXCX0 0,发生转移:发生转移:IPIPIPIP8 8位位移量位位移量 ;CX0CX0,顺序执行顺序执行CX寄存器通常在程序中用做计数器寄存器通常在程序中用做计数器JCXZ指令用来判断计数是否为指令用来判断计数是否为0305.2 循环程序设计循环程序设计一、循环程序的结构形式一、循环程序的结构形式二、循环程序设计二、循环程序设计三、多重循环程序设计三、多重循环程序设计31一、循环程序的结构形式一、循环程序的结构形式 结束结束 初始化初始化 循环的初始状态循环的初始状态 循环体循环体 循环的工作部分循环的工作部分及修改部分及修改部分 计数控制循环计数控制循环条件控制循环条件控制循环修改部分修改部分控制条件控制条件Y YN N先循环,后判断先循环,后判断32一、循环程序的结构形式一、循环程序的结构形式 结束结束 初始化初始化 循环的初始状态循环的初始状态 循环体循环体 循环的工作部分循环的工作部分及修改部分及修改部分 计数控制循环计数控制循环条件控制循环条件控制循环修改部分修改部分控制条件控制条件Y YN N先判断,后循环先判断,后循环33二、循环程序设计二、循环程序设计(例)(例)例例5.1 试编写一程序把试编写一程序把BX寄存器内的寄存器内的2进制数用进制数用16进制数的进制数的形式在屏幕上显示出来。形式在屏幕上显示出来。分析:分析:1、四位、四位2进制数对应一位进制数对应一位16进制数;进制数;2、BX从左到右四位为一组分别显示;从左到右四位为一组分别显示;3、0-9的的ASCII码为码为30-39H,A-F的的SCII码为码为41-46H;(0-9加加30H)(A-F加加37H)4、屏幕显示:屏幕显示:(DL)中放入要显示的字符的中放入要显示的字符的ASCII码;码;MOV AH,02H INT 21H34开始开始初始化循环计数值(初始化循环计数值(4次)次)BX循环左移循环左移4位位取出取出BX的低的低4位位显示一个字符显示一个字符循环计数值循环计数值-1-1循环计数值循环计数值=0 0?结束结束Y YN转换为转换为ASCII码码程序见程序见P162-163rotate:35例例5.2 在在ADDR单元存放着数单元存放着数Y的地址,试编制一程的地址,试编制一程序把序把Y中中1的个数存入的个数存入COUNT单元中单元中36开始开始1的个数计数器的个数计数器00循环次数计数器循环次数计数器CX1616Y左移一次左移一次CF=11的个数计数器的个数计数器+1+1CX CX-1=0CX-1=0COUNT 1的个数计数器的个数计数器结束结束NY YNY YY=0NY Y例例5.237DATA SEGMENTYDW 1234HADDRDW YCOUNTDB?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DL,0MOV BX,ADDRMOV AX,BXMOV CX,16REPEAT:SHL AX,1JNC NEXTINC DLNEXT:LOOP REPEATEXIT0:MOV COUNT,DLMOV AH,4CHINT 21HCODEENDSEND STARTCMP AX,0JZ EXIT0例例5.2JMP REPEAT38例例5.4 将正数将正数N插入一个已升序排列的字数组的正确位置。插入一个已升序排列的字数组的正确位置。该数组的首地址和末地址分别为该数组的首地址和末地址分别为ARRAY_ HEAD 和和ARRAY_ END,其中所有的数均为正数。其中所有的数均为正数。解法一:解法一:w从数组的尾部开始比较从数组的尾部开始比较N较大,则在比较对象后插入,结束循环较大,则在比较对象后插入,结束循环N较小,则把比较对象及其后元素后移一个字较小,则把比较对象及其后元素后移一个字w循环结束的控制:循环结束的控制:执行插入操作后结束循环执行插入操作后结束循环w若若N比所有元素都小,扫描整个数组后仍无法结束循环,将比所有元素都小,扫描整个数组后仍无法结束循环,将-1加加在数组前可解决该问题在数组前可解决该问题 23,37,49,5232ENDHEAD-1,23,37,49,5232,-1,39开始开始(ARRAY_HEAD-2)-1-1初始化变址寄存器初始化变址寄存器SI将将N放在放在K的位置的位置Kb或或ahigh b:数组中无数组中无b,转到数组无转到数组无b的处理;的处理;若若alow b b:high=mid-1,继续下一步;继续下一步;若若amid high,数组中无数组中无b,转到数组无转到数组无b的处理;的处理;否则:重复第否则:重复第3步。步。49开始开始CXDIDIAX=DI?BX(DI+SI)/2(DI+SI)/2结束结束NY YNDIDI+2,SIDI+2*CXDI+2,SIDI+2*CXAXSI?Y YNNNAX=BX?Y YAXBX?Y YNSIBX-2BX-2DIBX+2BX+2DISI?Y YN找到的处理找到的处理无要找的数时处理无要找的数时处理流程图流程图:50程序:Data segment array dw Data endsCode segmentMain proc far assume cs:code,ds:dataStart:push ds xor ax,ax push ax mov ax,data mov ds,ax lea di,array mov cx,di add di,2 shl cx,1 mov si,cx add si,di cmp ax,di je match1 jb no_match cmp ax,si je match2 ja no_matchNext:Mov bx,di Add bx,si shr bx,1 cmp ax,bx je match3 ja higherLower:mov si,bx Sub si,2 jmp compareHigher:mov di,bx add bx,2Compare:cmp di,si jbe nextNo_match:clc jmp exit0Match1:stc mov si,di jmp exit0Match2:stc jmp exit0 Match3:stc mov si,bx exit0:ret.51用跳转表实现多路分支【例例5.10】设设某某程程序序有有8路路分分支支,试试根根据据键键盘盘输输入入的的数数(18),将将程程序序的的执执行行转移到其中的一路分支。转移到其中的一路分支。52程序如下:程序如下:DATASEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATAMOV DS,AX MOV AH,01H INT 21H ;从键盘上输入一个字符至从键盘上输入一个字符至AL SUB AL,30H DEC AL SHL AL,1 MOV AH,00H MOV BX,AX JMP WORD PTR TABBXBXP1:P1:P2:P2:P7:P7:P8:P8:RETMAIN ENDPCODE ENDS END START53

    注意事项

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

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




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

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

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

    收起
    展开