收藏 分销(赏)

ch09-分支与循环程序设计.doc

上传人:xrp****65 文档编号:7665333 上传时间:2025-01-11 格式:DOC 页数:16 大小:116.50KB 下载积分:10 金币
下载 相关 举报
ch09-分支与循环程序设计.doc_第1页
第1页 / 共16页
ch09-分支与循环程序设计.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
第5章 分支与循环程序设计 5.1. 概述 设计步骤: 描述问题à确定算法à绘制流程图à分配存储空间和工作单元à编写程序à上机调试 5.2. 分支程序设计 5.2.1 分支程序结构 条件? 。。。 条件? 二路分支结构 多路分支结构 5.2.2 二路分支程序设计方法 例5.2.1 -128≤x≤127 DATA SEGMENT XX1 DB 10; X=给定一个值 YY1 DB ? ; Y DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DS MOV DS, AX MOV AL,XX1 CMP AL, 0 JZ AA1; =0 JNS AA2 MOV AL,0FFH; =-1 JMP AA1 AA2: MOV AL,1; =1 AA1: MOV YY1,AL; MOV AH,4CH INT 21H CODE ENDS END START 5.2.3 多路分支程序设计方法 逻辑分解法;地址表法; 段内转移表法; 1. 逻辑分解法 CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H ;键入值 CMP AL,31H JZ WORK1 CMP AL,32H JZ WORK2 CMP AL,33H JZ WORK3 CMP AL,34H JZ WORK4 CMP AL,35H JZ WORK5 JMP WORK0 WORK1: …(jmp work0) WORK2: …(jmp work0) WORK3: …(jmp work0) WORK4: …(jmp work0) WORK5: …(jmp work0) WORK0: MOV AH,4CH INT 21H CODE ENDS END START 2. 地址表法 把模块的地址保存在一个表中,通过查表跳到相应模块。 表地址 = 表首地址 + (键号-1)*2 DATA SEGMENT TABLE DW WORK1,WORK2,WORK3,WORK4,WORK5 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE ;表首地址 MOV AH,1 INT 21H AND AL,0FH DEC AL ;键号-1 ADD AL,AL ;(键号-1)*2 SUB AH,AH ADD BX,AX ;表地址 = 表首地址 + (键号-1)*2 JMP WORD PTR[BX] WORK1: …(jmp work0) WORK2: …(jmp work0) WORK3: …(jmp work0) WORK4: …(jmp work0) WORK5: …(jmp work0) WORK0:MOV AH,4CH INT 21H CODE ENDS END START 3. 段内转移表法 段内短转移:(jmp disp8为2字节指令) 转移表地址=转移表首地址+(键号-1)*2 段内近转移:(jmp disp16为3字节指令) 转移表地址=转移表首地址+(键号-1)*3 段间远转移:(jmp disp32为4字节指令) 转移表地址=转移表首地址+(键号-1)*4 CODE SEGMENT ASSUME CS:CODE START: LEA BX,WORK MOV AH,1 INT 21H AND 0FH DEC AL MOV AH,AL ADD AL,AL ADD AL,AH ;x3 SUB AH,AH ADD BX,AX JMP BX ;转移表 WORK: JMP NEAR PTR WORK1 JMP NEAR PTR WORK2 JMP NEAR PTR WORK3 JMP NEAR PTR WORK4 JMP NEAR PTR WORK5 ;工作模块 WORK1: …(jmp work0) WORK2: …(jmp work0) WORK3: …(jmp work0) WORK4: …(jmp work0) WORK5: …(jmp work0) WORK0:MOV AH,4CH INT 21H CODE ENDS END START 5.3. 循环程序设计 5.3.1 循环程序的结构形式 5.3.2 循环程序的设计方法 方法:计数控制循环;条件控制循环;变量控制循环 1. 计数控制循环(循环次数已知) 例:5.3.1, 把1,2,3 …255加起来。 (1)先执行后判断(计数控制) DATA SEGMENT ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1 MOV AX, 0 MOV DH, 0 MOV CL, 255 AA1: MOV DL, [BX] ADD AX, DX INC BX SUB CL,1 ; DEC CL JNZ AA1 MOV SUM1, AX MOV AH,4CH INT 21H CODE ENDS END START (2)先判断后执行(计数控制) DATA SEGMENT ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1-1 MOV AX, 0 MOV DH, 0 MOV CL, 0 ; 初值256 AA1: INC BX SUB CL,1 JZ AA2 MOV DL, [BX] ADD AX, DX JMP AA1 AA2: MOV SUM1, AX MOV AH,4CH INT 21H CODE ENDS END START 2. 条件控制循环(结束条件已知) (1)先执行后判断(条件控制) DATA SEGMENT ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1 MOV AX, 0 MOV DH, 0 AA1: MOV DL, [BX] ADD AX, DX INC BX CMP DL,255 JNZ AA1 MOV SUM1, AX MOV AH,4CH INT 21H CODE ENDS END START (2)先判断后执行(条件控制) DATA SEGMENT ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1-1 ;*** MOV AX, 255 ; 初值为255,原因如下说明 MOV DH, 0 AA1: INC BX MOV DL, [BX] CMP DL,255 ; DL=255时,循环结束 JZ AA2 ADD AX, DX JMP AA1 AA2: MOV SUM1, AX MOV AH,4CH INT 21H CODE ENDS END START 3. 变量控制循环(结束条件已知) 数据255的地址为10Feh,做为变量控制的结束条件 (1)先执行后判断(变量控制) DATA SEGMENT 地址10FEh ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1 MOV AX, 0 MOV DH, 0 AA1: MOV DL, [BX] ADD AX, DX INC BX CMP BX, 10FFH JNZ AA1 MOV SUM, AX MOV AH,4CH INT 21H CODE ENDS END START (2)先判断后执行(变量控制) DATA SEGMENT ORG 1000H NUMBER1 DB 1,2,3,…255 SUM1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA BX, NUMBER1-1 ;*** MOV AX, 0 ; MOV DH, 0 AA1: INC BX CMP BX,10FFH ;255的地址为10FEH JZ AA2 MOV DL, [BX] ADD AX, DX JMP AA1 AA2: MOV SUM1, AX MOV AH,4CH INT 21H CODE ENDS END START 5.3.3 单重循环 例5.3.2 求无符号整数的平方根的整数部分, DATA SEGMENT NUMBER1 DW 25 ROOT1 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX MOV AX, NUMBER1 MOV CX, 0; MOV BX, 1 AA1: SUB AX, BX INC CX ADD BX, 2 JNC AA1 DEC CX MOV ROOT1, CX MOV AH,4CH INT 21H CODE ENDS END START 例5.3.3在CRT上显示“中”字的源程序 DATA SEGMENT NUMBER1 DB 0AH, 0DH DB ‘ A ‘, 0AH, 0DH DB ‘AAAAAAA’, 0AH, 0DH DB ‘A A A’, 0AH, 0DH DB ‘A A A’, 0AH, 0DH DB ‘AAAAAAA’, 0AH, 0DH DB ‘ A ‘, 0AH, 0DH DB ‘ A ‘, 0AH, 0DH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA, BX, NUMBER1 MOV CX, 65 AA1: MOV DL, [BX] MOV AH, 2 INT 21H INC BX LOOP AA1 MOV AH,4CH INT 21H CODE ENDS END START 例 5.3.4 在CRT上显示16位十进制数8988998899989899 DATA SEGMENT RULER1 DW 0100110011101011 ;(逻辑尺法) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX MOV BX, RULER1 MOV CX, 16 AA1: MOV DL, 38H SHL BX, 1 JNC AA2 INC DL ; MOV DL, 39H AA2: MOV AH, 2 INT 21H LOOP AA1 MOV AH,4CH INT 21H CODE ENDS END START 5.3.4 多重循环 例5.3.5用逻辑尺法,在CRT上显示“中” 空格---0表示 ‘A’-----1表示 00010000à10h 11111110à0Feh 10010010à92h 10010010à92h 11111110à0Feh 00010000à10h 00010000à10h DATA SEGMENT RULER1 DB 10h, 0Feh, 92h, 92h, 0Feh, 10h, 10h DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA SI, RULER1 MOV CX, 7 ; 外循环计数次数 AA1: MOV DH, 8 ;内循环计数次数 MOV DL, 0AH MOV AH, 2 INT 21H MOV DL, 0DH MOV AH, 2 INT 21H MOV BL, [SI] AA2: MOV DL, 20H SHL BL, 1 JNC AA3 ADD DL, 21H ; MOV DL, 41H; ‘A’ AA3: MOV AH, 2 INT 21H DEC DH JNZ AA2 ;内循环控制 MOV DL, 0AH MOV AH, 2 INT 21H MOV DL, 0DH MOV AH, 2 INT 21H INC SI LOOP AA1 ; 外循环控制 MOV AH,4CH INT 21H CODE ENDS END START 例5.3.6 五个学生参加4门课的考试,成绩以压缩BCB码方式存放在COURSE1数组中,计算每个学生的总分。 DATA SEGMENT COURSE1 DB 70H, 88H, 92H, 90H, 99H ; 第一门课成绩 DB 67H, 77H, 88H, 76H, 69H ; 第二门课成绩 DB 74H, 87H, 77H, 74H, 70H ; 第三门课成绩 DB 99H, 97H, 94H, 98H, 96H ; 第四门课成绩 NUM1 DW 5 DUP(0) ;5个学生的总成绩结果单元 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX LEA SI, COURSE1 LEA DI, NUM1 MOV CL, 5 ; 外循环计数次数 AA1: MOV BX, SI MOV AX, 0 ; 放累加结果 MOV CH, 4 ;内循环计数次数 AA2: ADD AL, [BX] DAA ADC AH, 0 ADD BX, 5 DEC CH JNZ AA2; 内循环控制 MOV [DI], AX ; 存一个学生的总分成绩 INC SI ADD DI, 2 DEC CL JNZ AA1 ; 外循环控制 MOV AH,4CH INT 21H CODE ENDS END START 例 5.3.7 键入3~9间的数字,输出一个用“*“组成的三角形。 例如键入5,输出如下: * * * * ** * *** * **** CODE SEGMENT ASSUME CS:CODE START: MOV AH, 1 INT 21H CMP AL, 33H JC START; JB start CMP AL,3AH JNC START ;界限为3~9 ,JAE start AND AL, 0FH MOV BL, AL;保存键入的值,作为外循环的次数 MOV BH, 1;内循环次数, 它是可变的,但不大于BL AA1: MOV DL, 0AH MOV AH, 2 INT 21H MOV DL, 0DH MOV AH, 2 INT 21H MOV CL, BH AA2: MOV DL, ‘*’ MOV AH, 2 INT 21H DEC CL JNZ AA2 ;内循环控制, 显示一行的”*”,个数由BH定 INC BH CMP BL, BH JNC AA1 ; 外循环控制 JBE AA1 MOV AH,4CH INT 21H CODE ENDS END START 例5.3.8 冒泡法排序算法:图 1 2 3 4 . . N 大 小 1)(N-1)*(N-1)次比较法 l 第一次内循环比较N-1次,第二次循环比较N-1次,…,最后一次(N-1次)循环比较N-1次。 DATA SEGMENT NUMBER1 DB 100,3,90,80,99,77,44,66,50 N_1 EQU $-NUMBER1 –1 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, N_1 ;外循环计数次数 AA1: LEA BX, NUMBER1 MOV CX, N_1 ;内循环计数次数 AA2: MOV AL, [BX] CMP AL, [BX+1] JNC AA3 ;JGE AA3 XCHG AL, [BX+1] MOV [BX], AL ;交换 AA3: INC BX LOOP AA2 DEC DX JNZ AA1 MOV AH, 4CH INT 21H CODE ENDS END STARTS 2)(N-1)!次比较法 l 第一次内循环比较N-1次,第二次循环比较N-2次,…,最后一次(N-1次)循环比较1次。 DATA SEGMENT NUMBER1 DB 100,3,90,80,99,77,44,66,50 N_1 EQU $-NUMBER1 –1 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, N_1 ;外循环计数次数 AA1: LEA BX, NUMBER1 MOV CX, DX ; ***内循环计数次数N-1, N-2,…,1 AA2: MOV AL, [BX] CMP AL, [BX+1] JNC AA3 ;JGE AA3 XCHG AL, [BX+1] MOV [BX], AL ;交换 AA3: INC BX LOOP AA2 DEC DX JNZ AA1 MOV AH, 4CH INT 21H CODE ENDS END STARTS 3)(N-1)(N-2)…(N-m)次比较法 l 第一次内循环比较N-1次,第二次循环比较N-2次,…,最后一次(m次)循环比较N-m次(此次比较时无交换,排序结束)。 l 内循环有交换标志AH=1,无交换标志AH=0,若内循环一次无交换,则排序完成。 DATA SEGMENT NUMBER1 DB 100,3,90,80,99,77,44,66,50 N_1 EQU $-NUMBER1 –1 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, N_1 ;外循环计数次数 AA1: LEA BX, NUMBER1 MOV AH, 0 ;标志清零 MOV CX, DX ; ***内循环计数次数N-1, N-2,…,1 AA2: MOV AL, [BX] CMP AL, [BX+1] JNC AA3 ;JGE AA3 XCHG AL, [BX+1] MOV [BX], AL ;交换 MOV AH, 1 ;表示有交换 AA3: INC BX LOOP AA2 OR AH, AH JZ AA4 ; AH=0, 表示无新交换,排序结束, ;SHR AH,1; JNC AA4 DEC DX JNZ AA1 AA4: MOV AH, 4CH INT 21H CODE ENDS END STARTS 考试题:P200 5.4,5.2,5.8 1.试编写从键盘上接收一个4位的16进制数,并在CRT上显示出与它等值的二进制数的源程序。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服