第五部分循环与分支程序设计方案教学-ppt课件_第1页
第五部分循环与分支程序设计方案教学-ppt课件_第2页
第五部分循环与分支程序设计方案教学-ppt课件_第3页
第五部分循环与分支程序设计方案教学-ppt课件_第4页
第五部分循环与分支程序设计方案教学-ppt课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第五章 循环与分支程序设计w 5.1 循环与转移指令w 5.2 循环程序设计w 5.3 分支程序设计25.1 循环与转移指令一、循环控制指令二、转移指令控制转移类指令经过改动IP和CS值,实现程序执行顺序的改动3一、循环控制指令w 8086指令系统的循环控制指令均为二字节指令w 一字节为转移的相对位移量8位带符号的二进制数 IP IP+相对位移量w EIP EIP+相对位移量w 隐含运用CX作为循环计数器 程序中的某段需反复执行假设干次时,用循环来实现短转移4 LOOP label ;CXCX1,CX0,循环到标号label一、循环控制指令LOOPE/LOOPZ label;CXCX1,CX

2、0 且ZF1,循环到标号labelLOOPNE/NZ label;CXCX1,CX0且ZF0,循环到标号label等于时循环不等于时循环5一、循环控制指令例MOV CX,COUNT;设置循环次数MOV SI,OFFSET DATA_BYTEXOR AX,AX;BX清0,用于存放累加和 AGAIN: ADD AL,SIADC AH,0INC SILOOP AGAIN;计数器减1,不为0继续循环6一、循环控制指令例MOV CX,COUNT;设置循环次数MOV SI,OFFSET STRINGXOR BX,BX;BX清0,用于记录空格数MOV AL,20H AGAIN:CMP AL,SIJNZ NE

3、XT;ZF=0,非空格,转移INC BX;ZF=1,是空格,个数加1NEXT:INC SILOOP AGAIN;计数器减1,不为0继续循环7二、转移指令w 无条件转移指令w 条件转移指令8无条件转移指令JMP label ;程序转向label标号指定的地址NEARFARw 只需执行无条件转移指令JMP,就使程序转到指定的目的地址处,从目的地址处开场执行那里的指令w JMP指令分成4种类型:w 段内转移、直接寻址w 段内转移、间接寻址w 段间转移、直接寻址w 段间转移、间接寻址目的地址与JMP属同一逻辑段,只修正IP值从一个代码段转移到另一个代码段,CS和IP都会被修正91. 无条件转移指令目的

4、地址的寻址方式w 直接寻址方式w 转移地址象立刻数一样,直接在指令的机器代码中,就是直接寻址方式w 间接寻址方式w 转移地址在存放器或主存单元中,就是经过存放器或存储器的间接寻址方式用标号表达用存放器或存储器操作数表达101. 无条件转移指令目的地址的范围:段内w 段内转移近转移nearw 在当前代码段64KB范围内转移 32KB范围w 不需求更改CS段基值,只需改动IP偏移地址w 段内转移短转移shortw 转移范围可以用一个字节表达,在段内128127范围的转移代码段代码段111.无条件转移指令目的地址的范围:段间w 段间转移远转移farw 从当前代码段跳转到另一个代码段,可以在1MB范围

5、w 需求更改CS段基值和IP偏移地址w 目的地址必需用一个32位数表达,叫做32位远指针,它就是逻辑地址代码段代码段实践编程时,汇编程序会根据目的地址的间隔,自动处置成短转移、近转移或远转移程序员可用操作符short、near ptr 或far ptr 强迫12段内直接寻址转移 JMP label;IPIP+位移量位移量是紧接着JMP指令后的那条指令的偏移地址,到目的指令的偏移地址的地址位移当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负实践为相对寻址JMP AGAIN;转移到AGAIN处继续执行AGAIN: DEC CX;标号AGAIN的指令JMP OUTPUT;转向OU

6、TPUTOUTPUT:MOV RESULT,AL;标号OUTPUT的指令13段内间接寻址转移 JMP r16/m16 ;IPr16/m16将一个16位存放器或主存字单元内容送入IP存放器,作为新的指令指针,但不修正CS存放器的内容JMP AX;IPAXJMP WORD PTR BX;IPBX14段间直接寻址转移JMP far ptr label;IPlabel的偏移地址;CSlabel的段基值将标号所在段的段基值作为新的CS值,标号在该段内的偏移地址作为新的IP值;程序跳转到新的代码段执行JMP FAR PTR OTHERSEG;远转移到代码段2的otherseg15段间间接寻址转移JMP f

7、ar ptr mem ;IPmem,CSmem+2用一个双字存储单元表示要跳转的目的地址。这个目的地址存放在主存中延续的两个字单元中的,低位字送IP存放器,高位字送CS存放器MOV WORD PTR BX,0MOV WORD PTR BX+2,1500HJMP FAR PTR BX ;转移到1500H:0162.条件转移指令Jcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行指定的条件cc假设成立,程序转移到由标号label指定的目的地址去执行指令;条件不成立,那么程序将顺序执行下一条指令操作数label是采用短转移,称为相对寻址方式172. 条件转移指令w J

8、cc指令的操作数label是一个标号w 一个8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短间隔转移w Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2182. 条件转移指令指令的分类w Jcc指令不影响标志,但要利用标志。w 根据利用的标志位不同,19条指令分成4种情况:w 判别单个标志位形状w 比较无符号数高低w 比较有符号数大小w 判别计数器CX为019助记符标志位助记符标志位JCCF=1JA/JNBECF=0且ZF=0JNCCF=0JAE/JNBCF=0或ZF=1JZ/JEZF =1JB/JNAECF=1且ZF=0JNZ/J

9、NEZF =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个助记符 采用多个助记符,只是为了方便记忆和运用20判别单个标志位形状这组指令单独判别5个形状标志之一JZ/JE和JNZ/JNE:利用零标志ZF,判别结果能否为零或相等JS和JNS:利用符号标志SF,判别结果是正是负JO和JNO:利用溢出标志OF,判别结果能否产生溢

10、出JP/JPE和JNP/JPO:利用奇偶标志PF,判别结果中“1的个数是偶是奇JC和JNC:利用进位标志CF,判别结果能否进位或借位例 题例 题例 题例 题例 题 212.条件转移指令 JZ/JNZ指令REPZ CMPSB;反复比较两个字符JNZ UNMAT;ZF0不等,转移MOV AL,0;顺序执行相等JMP OUTPUT UNMAT:MOV AL,0FFH OUTPUT: MOV RESULT,ALREPZ CMPSB;反复比较两个字符JZ MAT;ZF1相等,转移MOV AL,0FFH;顺序执行不等JMP OUTPUTMAT: MOV AL,0 OUTPUT: MOV RESULT,AL

11、222. 条件转移指令 JS/JNS指令w 计算|XY|绝对值。X和Y为存放于X单元和Y单元的16位操作数,结果存入RESULT。MOV AX,XSUB AX,YJNS NONNEGNEG AXNONNEG:MOV RESULT,AX232.条件转移指令 JO/JNO指令w 计算XY。X和Y为存放于X单元和Y单元的16位操作数,假设溢出,那么转移到OVERFLOW处置MOV AX,XSUB AX,YJO OVERFLOW.;无溢出,结果正确OVERFLOW: .;有溢出处置242.条件转移指令 JP/JNP指令w 设字符的ASCII码在AL存放器中。将字符加上奇校验位:在字符ASCII码中为“

12、1的个数为奇数时令其最高位为“0,否那么令最高位为“1AND AL,7FH;最高位置“0,同时判别“1的个数JNP NEXT;个数已为奇数,那么转向NEXTOR AL,80H;否那么,最高位置“1NEXT:.252.条件转移指令 JC/JNC指令w 记录BX中1的个数XOR AL,AL;AL0,CF0AGAIN:TEST BX,0FFFFH ;等价于 CMP BX,0JZ NEXTSHL BX,1JNC AGAININC ALJMP AGAINNEXT:.;AL保管1的个数262.条件转移指令无符号数的比较无符号数的大小用高Above低Below表示利用CF确定高低、利用ZF标志确定相等Equ

13、al两数的高低分成4种关系:高于不低于等于: JA JNBE 高于等于不低于: JAE JNB 低于不高于等于: JBJNAE低于等于不高于: JBEJNA272. 条件转移指令无符号数的比较例CMP AX,BX ;比较AX和BXJAE NEXT;假设AXBX,转移XCHG AX,BX;假设AXBX,交换NEXT: .结果:AX保管较大的无符号数282. 条件转移指令有符号数的比较w 有符号数的大Greater小Less需求组合OF、SF标志,并利用ZF标志确定相等Equalw 两数的大小分成4种关系:w 小于不大于等于:JLJNGEw 小于等于不大于:JLEJNGw 大于不小于等于: JG

14、JNLE w 大于等于不小于: JGE JNL 292. 条件转移指令有符号数的比较例CMP AX,BX ;比较AX和BXJGE NEXT;假设AXBX,转移XCHG AX,BX;假设AXBX,交换NEXT: .结果:AX保管较大的有符号数302. 条件转移指令计数器CX为0转移JCXZ label ;CX0,发生转移:IPIP8位位移量 ;CX0,顺序执行CX存放器通常在程序中用做计数器JCXZ指令用来判别计数能否为0315.2 循环程序设计一、循环程序的构造方式二、循环程序设计三、多重循环程序设计32一、循环程序的构造方式 终了 初始化 循环的初始形状 循环体 循环的任务部分及修正部分 计

15、数控制循环条件控制循环修正部分控制条件YN先循环,后判别33一、循环程序的构造方式 终了 初始化 循环的初始形状 循环体 循环的任务部分及修正部分 计数控制循环条件控制循环修正部分控制条件YN先判别,后循环34xor ax,ax;被加数ax清0mov cx,100again:add ax,cx;从100,99,.,2,1倒序累加loop again.model small.stack 256.datasumdw ?.code.startupmov sum,ax;将累加和送入指定单元.exit 0end二、循环程序设计例35例5.2 在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入

16、COUNT单元中开场1的个数计数器0循环次数计数器CX16Y左移一次CF=11的个数计数器+1CX CX-1=0COUNT 1的个数计数器终了NYNY循环次数固定,完全由循环计数器控制36 DATA SEGMENT YDW 1234H ADDRDW Y COUNTDB ? DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV DL,0MOV BX,ADDRMOV AX,BXMOV CX,16REPEAT: SHL AX,1 JNC NEXT INC DLNEXT: LOOP REPEATEXIT0: M

17、OV COUNT,DL MOV AH,4CH INT 21HCODE ENDS END START例5.237开场1的个数计数器0循环次数计数器CX16Y左移一次CF=11的个数计数器+1CX CX-1=0COUNT 1的个数计数器终了NYNYY=0NY例5.238DATA SEGMENTY DW 1234HADDR DW YCOUNT DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV DL,0 MOV BX,ADDR MOV AX,BX MOV CX,16 REPEAT:SHL A

18、X,1JNC NEXTINC DL NEXT: LOOP REPEAT EXIT0: MOV COUNT,DLADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21H CODE ENDSEND STARTCMP AX,0JZ EXIT0例例5.2JMP REPEAT39w 例5.4 将正数N插入一个已升序陈列的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_ HEAD 和ARRAY_ END,其中一切的数均为正数。解法一:从数组的尾部开场比较N较大,那么在比较对象后插入,终了循环N较小,那么把比较对象及其后元素后移一个字w 循环终了的控制:执行插入操作后终

19、了循环w 假设N比一切元素都小,扫描整个数组后仍无法终了循环,将-1加在数组前可处理该问题 23, 37, 49, 5232ENDHEAD-1, 23, 37, 49, 5232,-1,40开场(ARRAY_HEAD-2)-1初始化变址存放器SI将N放在K的后面K=N修正地址K后移一个字单元终了YN例例5.441 DATAREASEGMENT XDW ?ARRAY_HEAD DW 3,5,15,23,37,49 ARRAY_ENDDW 105 NDW 32 DATAREAENDS PROGRAMSEGMENT MAINPROC FAR ASSUME CS:PROGRAM,DS:DATAREA

20、START:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAREAMOV DS,AXMOV AX,NMOV ARRAY_HEAD-2,-1MOV SI,0COMP:CMP ARRAY_ENDSI,AXJLE INSERTMOV BX,ARRAY_ENDSIMOV ARRAY_ENDSI+2,BXSUB SI,2JMP COMPINSERT:MOV ARRAY_ENDSI+2,AXRETMAINENDPPROGRAM ENDSEND START例例5.4MOV BX,ARRAY_ENDSI CMP BX,AXJLE INSERT42w 例5.4 将正数N插入一个已升序陈列的字

21、数组的正确位置。 该数组的首地址和末地址分别为ARRAY_ HEAD 和ARRAY_ END,其中一切的数均为正数。解法二:从数组的头部开场比较N较小,那么在比较对象前插入,终了循环N较大,那么把比较对象及其前元素前移一个字w 循环终了的控制:可扫描整个数组,循环次数为数组元素个数执行插入操作后终了循环w 假设N比一切元素都小,构成新的头;假设N比一切元素都大,那么被置于尾部43DSEGSEGMENT PARA DATADW ?ARRAY_HEAD DW 3,5,13H,23H,37HDW 49H,52H,65H,78H,99H,105HCOUNT EQU $-ARRAY_HEAD/2 NDW

22、 32H DSEG ENDS CSEG SEGMENT PARA CODEASSUME CS:CSEG ASSUME DS:DSEG,SS:SSEG MAIN PROC FAR;make neccessary initalizalitionMOV AX,DSEGMOV DS,AXMOV ES,AXMOV AX,NMOV SI,0MOV CX,COUNTREPEAT: MOV BX,ARRAY_HEADSICMP BX,AXJAE INSERT ;N较小,那么转插入操作MOV ARRAY_HEADSI-2,BX;数组元素前移1字单元INC SIINC SILOOP REPEATINSERT: M

23、OV ARRAY_HEADSI-2,AX;将N参与到数组中MOV AX,4C00HINT 21HMAIN ENDPCSEG ENDSEND MAIN ;SET ENTRY POINT44例5.5 设有数组X和Y,每个数组都有10个元素,完成以下计算:Z1=X1+Y1Z2=X2+Y2Z3=X3-Y3Z4=X4-Y4Z5=X5-Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10结果存入数组Z。 比例尺:0000000011011100B45DATASEGMENTXDW 11,33,10,60,4,7,19,80,45,23YDW 44,5,2,90,78,3

24、2,12,10,100,98ZDW 10H DUP(?)FLAGDW 0000000011011100B DATAENDSSTKSEGMENT STACKDW 20H DUP(0)STKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STKSTART:MOV AX,DATAMOV DS,AXMOV BX,0MOV CX,10MOV DX,FLAGNEXT:MOV AX,XBXSHR DX ,1JC SUBTRACTADD AX,YBXJMP RESULTSUBTRACT : SUB AX,YBXRESULT :MOV ZBX,AXADD BX,2LOOP NE

25、XTMOV AH,4CHINT 21HCODEENDSEND START46三、多重循环程序设计w例5.7 有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的次序整序冒泡法从第一个元素开场,依次对相邻的两个元素进展比较,使前一个元素不小于后一个元素;将一切元素比较完之后,最小的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进展比较,得到次小的元素排在后面;如此反复,直至完成就实现元素从大到小的排序这需求一个双重循环程序构造47冒泡法的排序序号 数比比 较较 遍遍 数数1234 1 32 2 15 3 16 4 8 5 85321615858321685158328

26、51615885321615848CSEG SEGMENT PARA CODEASSUME CS:CSEG, DS:DSEG,SS:SSEGMAIN PROC FAR;MAKE NECCESSARY INITALIZALITIONPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXMOV CX,NDEC CXLOOP1:MOV DI,CX;保管计数器MOV BX,0;数组地址指针清零LOOP2:MOV AX,ABXCMP AX,ABX+2JGE COTINUEXCHG ABX+2,AX;交换MOV ABX,AXCOTINUE:ADD BX,2

27、;修正数组指针LOOP LOOP2MOV CX,DI;恢复循环计数器LOOP LOOP1RETMAIN ENDPCSEG ENDSEND MAIN ;SET ENTRY POINT49CSEG SEGMENT PARA CODEASSUME CS:CSEG, DS:DSEG,SS:SSEGMAIN PROC FAR;MAKE NECCESSARY INITALIZALITIONPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXMOV CX,NDEC CXLOOP1:MOV DI,CX;保管计数器MOV BX,0;数组地址指针清零MOV DL

28、,0LOOP2:MOV AX,ABXCMP AX,ABX+2JGE COTINUEXCHG ABX+2,AX;交换MOV ABX,AXINC DL;交换次数计数器+1COTINUE:ADD BX,2;修正数组指针LOOP LOOP2CMP DL,0JZ EXIT0;数组已整序,那么退出MOV CX,DI;恢复循环计数器LOOP LOOP1 EXIT0:RET MAIN ENDP CSEG ENDSEND MAIN ;SET ENTRY POINT505.3 分支程序设计一、分支程序的构造方式二、分支程序的设计三、跳转表51一、分支程序的构造方式AH=0fuction0NAH=1AH=2fuct

29、ion1fuction2NNYYYC多分支构造多分支构造52分支程序的设计方法w 例5.9 在附加段中,有一个按从小到大顺序陈列的无符号数数组,其首地址存放在DI存放器中,数组中的第一个单元存放着数组长度。在AX中有一无符号数,要求在数组中查找该数,如找到那么使CF=0,并在SI中给出该元素的偏移地址;如未找到,那么使CF=1。5354腾跃表法w 例5.10 试根据AL存放器中哪一位为1从低位到高位把程序转移到8个不同的程序分支去。w 跳转目的的地址在数据段中5-10-1.asm)w 跳转目的的地址在代码段中5-10-2.asm)55SSEG SEGMENT PARA STACK STACKD

30、W 100H DUP(0)SSEG ENDSDSEG SEGMENT PARA DATATABDW ROUTINE1;程序段1在代码段的偏移量DW ROUTINE2DW ROUTINE3DW ROUTINE4DW ROUTINE5DW ROUTINE6DW ROUTINE7DW ROUTINE8MESSDB THIS IS ROUTINE NUMBERDB 8DB 0AH,0DH,$DSEG ENDSCSEG SEGMENT PARA CODEASSUME CS:CSEG, DS:DSEG,SS:SSEGMAIN PROC FARMOV AX,DSEG;make neccessary init

31、alizalitionMOV DS,AXMOV ES,AXMOV AL, NUMBERCMP AL,0JE CONTINUE_MAIN_LINE;AL值为0那么继续运转主程序段LEA BX,TABLOP1:SHR AL,1JNC NOT_YETJMP WORD PTR BXNOT_YET:ADD BX,TYPE TABJMP LOP1CONTINUE_MAIN_LINE:MOV AH,4CHINT 21H56ROUTINE1:MOV NUMBER, 31HJMP EXITROUTINE2:MOV NUMBER, 32HJMP EXITROUTINE3:MOV NUMBER, 33HJMP EXITROUTINE4:MOV NUMBER, 34HJMP EXITROUTINE5:MOV NUMBER, 35HJMP EXITROUTINE6:MOV NUMBER, 36HJMP EXITROUTINE7:MOV NUMBER, 37HJMP EXITROUTINE8:MOV NUMBER, 38HJMP EXITEXIT:MOV DX,OFFSET MESSMOV AH,9INT 21HJMP CONTINUE_MAIN_LINE;MOV AH,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论