第4节 循环程序设计
推荐给好友
打印
加入收藏
更新于2009-06-01 11:00:34

4.1 循环程序的结构

1.初始化部分
2.循环体部分
3.循环控制部分

循环程序的常见结构形式如图4.5(a)、(b)所示。


4.2 单重循环程序设计

1.计数控制
【例4.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。
显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如图4.6所示。


【例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.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”即可。

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.