第6章 循环程序设计方法.pptVIP

  • 14
  • 0
  • 约1.93千字
  • 约 19页
  • 2017-06-30 发布于江苏
  • 举报
第6章 循环程序设计方法

4.4 循环程序设计 4.4.1 循环程序的结构 4.4.2 单重循环程序设计 4.4.3 多重循环程序设计 4.4.1 循环程序的结构 1.初始化部分 2.循环体部分 3.循环控制部分 循环程序的常见结构形式如图4.5(a)、(b)所示。 4.4.2 单重循环程序设计 1.计数控制 2.条件控制 1.计数控制 【例4.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如图4.6所示。 【例4.8】 【例4.8】试编写一程序,要求比较两个字符串STR1和STR所含字符是否相同,若相同则显示‘MATCH!’,若不相同则显示‘NO MATCH!’。(程序略) 其流程图如图4.7所示。 2.条件控制 【例4.9】试编一个程序将字单元BUF中所含1的个数存入COUNT单元中。要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否为0,如果为0则结束循环,不为0,则继续循环。 其流程图如图4.8所示。 程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK EDNS DATA SEGMENT BUF DW 0011110010101011B COUNT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,BUF MOV CL,0 ;计数器为0 COPA: AND AX,AX JE EXIT ;(AX)=0,结束循环 SHL AX,1 ;AX 左移一位 JNC LOPA INC CL ;产生进位,(CL)+1→CL JMP LOPA EXIT: MOV COUNT,CL MOV AH,4CH INT 21H CODE ENDS END START 4.4.3 多重循环程序设计 【例4.10】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。 我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例子。 数 10 8 16 90 32 第一遍 10 16 90 32 8 第二遍 16 90 32 10 8 第三遍 90 32 16 10 8 程序流程图如图4.9所示。 程序如下: DATA SEGMENT BUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20 N=($-BUF)/2 DATA ENDS STACK SEGNMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CX LOOP1: MOV DX,CX MOV BX,0 LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHG AX,BUF[BX+2] MOV BUF[BX],AX L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 程序运行后,BUF区中的内容如下: 20,9,7,6,3,2,0,-4,-8,-9,-10 若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAE L”即可。 第4章 程序设计方法 * 返回本章首页 返回本节 图4.6 程序流程图 图4.7 程序流程图 返回本节 返回本节

文档评论(0)

1亿VIP精品文档

相关文档