ch09-分支与循环程序设计_第1页
ch09-分支与循环程序设计_第2页
ch09-分支与循环程序设计_第3页
ch09-分支与循环程序设计_第4页
ch09-分支与循环程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 分支与循环程序设计5.1. 概述设计步骤:描述问题à确定算法à绘制流程图à分配存储空间和工作单元à编写程序à上机调试5.2. 分支程序设计5.2.1 分支程序结构条件?。条件? 二路分支结构 多路分支结构5.2.2 二路分支程序设计方法例-128x127DATA SEGMENTXX1 DB 10; X=给定一个值YY1 DB ? ; YDATAENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX, DSMOV DS, AXMOV AL,XX1CMP AL, 0JZAA1;=0JNSAA2M

2、OV AL,0FFH;=-1JMPAA1AA2:MOV AL,1;=1 AA1:MOVYY1,AL; MOV AH,4CHINT 21HCODEENDSEND START5.2.3 多路分支程序设计方法逻辑分解法;地址表法; 段内转移表法;1. 逻辑分解法CODESEGMENTASSUME CS:CODESTART:MOV AH,1INT 21H;键入值CMP AL,31HJZWORK1CMP AL,32HJZWORK2CMP AL,33HJZWORK3CMP AL,34HJZWORK4CMP AL,35HJZWORK5JMPWORK0WORK1:(jmp work0)WORK2: (jmp

3、work0)WORK3: (jmp work0)WORK4: (jmp work0)WORK5: (jmp work0)WORK0:MOV AH,4CHINT21HCODEENDSENDSTART2. 地址表法把模块的地址保存在一个表中,通过查表跳到相应模块。表地址 = 表首地址 + (键号-1)2DATASEGMENTTABLEDWWORK1,WORK2,WORK3,WORK4,WORK5DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEABX,TABLE;表首地址MOV AH,1INT21HANDAL,

4、0FHDEC AL;键号-1ADDAL,AL;(键号-1)*2SUBAH,AHADDBX,AX;表地址 = 表首地址 + (键号-1)2JMPWORD PTRBXWORK1:(jmp work0)WORK2: (jmp work0)WORK3: (jmp work0)WORK4: (jmp work0)WORK5: (jmp work0)WORK0:MOV AH,4CH INT21HCODEENDSENDSTART3. 段内转移表法段内短转移:(jmp disp8为2字节指令)转移表地址=转移表首地址+(键号-1)2段内近转移:(jmp disp16为3字节指令)转移表地址=转移表首地址+(键

5、号-1)3段间远转移:(jmp disp32为4字节指令)转移表地址=转移表首地址+(键号-1)4CODESEGMENTASSUME CS:CODESTART:LEA BX,WORKMOV AH,1INT 21HAND0FHDECALMOV AH,ALADDAL,ALADDAL,AH;x3SUBAH,AHADDBX,AXJMPBX;转移表WORK:JMPNEAR PTR WORK1JMPNEAR PTR WORK2JMPNEAR PTR WORK3JMPNEAR PTR WORK4JMPNEAR PTR WORK5;工作模块WORK1:(jmp work0)WORK2: (jmp work0)

6、WORK3: (jmp work0)WORK4: (jmp work0)WORK5: (jmp work0)WORK0:MOV AH,4CHINT21HCODEENDSENDSTART 5.3. 循环程序设计5.3.1 循环程序的结构形式5.3.2 循环程序的设计方法方法:计数控制循环;条件控制循环;变量控制循环1. 计数控制循环(循环次数已知)例:, 把1,2,3 255加起来。(1)先执行后判断(计数控制)DATASEGMENTORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART

7、:MOV AX,DATAMOV DS, AXLEA BX, NUMBER1MOV AX, 0MOV DH, 0MOV CL, 255AA1:MOV DL, BXADD AX, DXINC BXSUB CL,1 ; DEC CLJNZ AA1MOV SUM1, AXMOV AH,4CHINT 21HCODEENDSEND START(2)先判断后执行(计数控制)DATASEGMENTORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA

8、BX, NUMBER1-1MOV AX, 0MOV DH, 0MOV CL, 0 ; 初值256AA1:INC BXSUB CL,1JZ AA2MOV DL, BXADD AX, DXJMP AA1AA2:MOV SUM1, AXMOV AH,4CHINT 21HCODEENDSEND START2. 条件控制循环(结束条件已知)(1)先执行后判断(条件控制)DATASEGMENTORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA

9、BX, NUMBER1MOV AX, 0MOV DH, 0 AA1:MOV DL, BXADD AX, DXINC BXCMP DL,255JNZ AA1MOV SUM1, AXMOV AH,4CHINT 21HCODEENDSEND START(2)先判断后执行(条件控制) DATASEGMENTORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA BX, NUMBER1-1 ;*MOV AX, 255 ; 初值为255,原因如下说

10、明MOV DH, 0 AA1:INC BXMOV DL, BXCMP DL,255 ; DL=255时,循环结束JZ AA2ADD AX, DXJMP AA1 AA2:MOV SUM1, AXMOV AH,4CHINT 21HCODEENDSEND START3. 变量控制循环(结束条件已知)数据255的地址为10Feh,做为变量控制的结束条件(1)先执行后判断(变量控制)DATASEGMENT地址10FEhORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATA

11、MOV DS, AXLEA BX, NUMBER1MOV AX, 0MOV DH, 0 AA1:MOV DL, BXADD AX, DXINC BXCMP BX, 10FFHJNZ AA1MOV SUM, AXMOV AH,4CHINT 21HCODEENDSEND START(2)先判断后执行(变量控制) DATASEGMENTORG 1000HNUMBER1DB 1,2,3,255SUM1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA BX, NUMBER1-1 ;*MOV AX, 0

12、; MOV DH, 0 AA1:INC BXCMP BX,10FFH ;255的地址为10FEH JZ AA2 MOV DL, BXADD AX, DXJMP AA1 AA2:MOV SUM1, AXMOV AH,4CHINT 21HCODEENDSEND START5.3.3 单重循环例 求无符号整数的平方根的整数部分,DATASEGMENT NUMBER1DW 25ROOT1 DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXMOV AX, NUMBER1MOV CX, 0; MOV BX, 1 A

13、A1:SUB AX, BX INC CXADD BX, 2 JNCAA1DECCXMOV ROOT1, CX MOV AH,4CHINT 21HCODEENDSEND START例在CRT上显示“中”字的源程序DATASEGMENT NUMBER1DB 0AH, 0DHDB A , 0AH, 0DHDB AAAAAAA, 0AH, 0DHDB A A A, 0AH, 0DHDB A A A, 0AH, 0DHDB AAAAAAA, 0AH, 0DHDB A , 0AH, 0DHDB A , 0AH, 0DH DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTA

14、RT:MOV AX,DATAMOV DS, AXLEA, BX, NUMBER1MOV CX, 65AA1:MOV DL, BXMOVAH, 2INT21HINCBXLOOPAA1 MOV AH,4CHINT 21HCODEENDSEND START例 在CRT上显示16位十进制数8988998899989899DATASEGMENT DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXMOV BX, RULER1MOV CX, 16AA1:MOV DL, 38HSHLBX, 1JNCAA2INC DL ; MO

15、V DL, 39HAA2:MOV AH, 2 INT21HLOOPAA1 MOV AH,4CHINT 21HCODEENDSEND START5.3.4 多重循环例用逻辑尺法,在CRT上显示“中”空格-0表示A-1表示00010000à10h11111110à0Feh10010010à92h10010010à92h11111110à0Feh00010000à10h00010000à10hDATASEGMENT RULER1DB 10h, 0Feh, 92h, 92h, 0Feh, 10h, 10h DATAENDSCODES

16、EGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA SI, RULER1MOV CX, 7 ; 外循环计数次数AA1:MOV DH, 8 ;内循环计数次数MOVDL, 0AH MOV AH, 2 INT21HMOVDL, 0DH MOV AH, 2 INT21HMOVBL, SIAA2:MOVDL, 20HSHLBL, 1JNCAA3ADDDL, 21H ; MOV DL, 41H; AAA3:MOV AH, 2 INT21H DECDHJNZAA2 ;内循环控制MOVDL, 0AH MOV AH, 2 INT21HMOVDL,

17、0DH MOV AH, 2 INT21HINCSILOOPAA1 ; 外循环控制 MOV AH,4CHINT 21HCODEENDSEND START例 五个学生参加4门课的考试,成绩以压缩BCB码方式存放在COURSE1数组中,计算每个学生的总分。DATASEGMENT COURSE1DB 70H, 88H, 92H, 90H, 99H ; 第一门课成绩 DB 67H, 77H, 88H, 76H, 69H ; 第二门课成绩DB 74H, 87H, 77H, 74H, 70H ; 第三门课成绩DB 99H, 97H, 94H, 98H, 96H ; 第四门课成绩NUM1DW 5 DUP(0)

18、 ;5个学生的总成绩结果单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS, AXLEA SI, COURSE1LEADI, NUM1MOV CL, 5 ; 外循环计数次数AA1:MOV BX, SIMOV AX, 0 ; 放累加结果MOV CH, 4 ;内循环计数次数AA2:ADD AL, BXDAAADC AH, 0ADDBX, 5DEC CHJNZAA2; 内循环控制MOVDI, AX ; 存一个学生的总分成绩INC SIADDDI, 2DEC CLJNZAA1 ; 外循环控制 MOV AH,4CHINT 2

19、1HCODEENDSEND START例 键入39间的数字,输出一个用“组成的三角形。例如键入5,输出如下: CODESEGMENTASSUMECS:CODE START:MOV AH, 1INT 21HCMPAL, 33HJCSTART; JB startCMPAL,3AHJNCSTART ;界限为39 ,JAE startANDAL, 0FHMOV BL, AL;保存键入的值,作为外循环的次数MOVBH, 1;内循环次数, 它是可变的,但不大于BL AA1:MOVDL, 0AH MOV AH, 2 INT21HMOVDL, 0DH MOV AH, 2 INT21H MOV CL, BHAA

20、2:MOV DL, *MOV AH, 2 INT21HDEC CLJNZAA2 ;内循环控制, 显示一行的”*”,个数由BH定INC BHCMPBL, BHJNC AA1 ; 外循环控制 JBE AA1MOV AH,4CHINT 21HCODEENDSEND START例 冒泡法排序算法:图1234.N大小1)(N-1)*(N-1)次比较法l 第一次内循环比较N-1次,第二次循环比较N-1次,,最后一次(N-1次)循环比较N-1次。DATASEGMENTNUMBER1DB100,3,90,80,99,77,44,66,50N_1EQU$-NUMBER1 1DATA ENDSCODESEGMEN

21、TASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOV DS, AXMOVDX, N_1 ;外循环计数次数AA1:LEABX, NUMBER1MOV CX, N_1;内循环计数次数AA2:MOVAL, BXCMPAL, BX+1JNCAA3;JGEAA3XCHGAL, BX+1MOVBX, AL;交换AA3:INC BXLOOPAA2DECDXJNZAA1MOV AH, 4CHINT 21HCODEENDSENDSTARTS2)(N-1)!次比较法l 第一次内循环比较N-1次,第二次循环比较N-2次,,最后一次(N-1次)循环比较1次。DATASEGMENTNUMBER1DB100,3,90,80,99,77,44,66,50N_1EQU$-NUMBER1 1DATA ENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOV DS, AXMOVDX, N_1 ;外循环计数次数AA1:LEABX, NUMBER1MOV CX, D

温馨提示

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

评论

0/150

提交评论