1、循环程序设计,第4章 汇编程序设计,MOV CX,98MOV AX,1MOV BX,2 Q1: ADD AX,BXINC BXLOOP Q1,思考:求1100的累加和。,一、 循环程序的组成,(1)循环初始化部分 (2)循环体 (3)循环参数修改部分 (4)循环控制部分,二、循环程序的结构,在程序设计中,常见的循环结构有两 种:一种是先执行循环体,然后判断循环是 否继续进行;另一种是先判断是否符合循环 条件,符合则执行循环体,否则退出循环。 两种循环结构如下图所示。,三、循环控制的方法,(1)计数控制法 (2)条件控制法 (3)混合控制法,1单循环程序设计,【例1】设有两个长度为8个字节的无符
2、号数分别存放在以NUM1、NUM2为首地址的连续的内存单元中,将两个数相加,并将结果存入SUM内存单元中。,【分析】8个字节可以当成4个字来运算,用循环带 进位加4次即可。,(计数控制法),SHUJU SEGMENTNUM1 DQ 1234506A812D778FHNUM2 DQ 3E543289A566398CHSUM DQ ? SHUJU ENDSDAIMA SEGMENTASSUME CS:DAIMA,DS:SHUJU KAISHI:,MOV AX,SHUJUMOV DS,AX LEA BX,NUM1 LEA SI,NUM2LEA DI,SUM MOV CX,4CLC,;内务操作,JIX
3、U: MOV AX,WORD PTR BXADC AX,WORD PTR SIMOV WORD PTR DI,AXADD BX,2ADD SI,2ADD DI,2LOOP JIXUMOV AH,4CHINT 21H CODE ENDSEND KAISHI,;功能实现,数据变大怎么办?,1单循环程序设计,【例2】编写程序完成求123N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。,【分析】用寄存器处理比较快速。因为结果要求 送两种数,可分别用AX、BX操作。,(条件控制法),DATA SEGMENTSUM DW ?CN DW ? DATA ENDSCO
4、DE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX ;初始化MOV AX,0 ;0送AXMOV BX,0 ;0送BX,LP: INC BX ;BX加1ADD AX,BX ;求累加和CMP AX,1000 ;条件控制JBE LP ;1000转MOV SUM,AXMOV CN,BX ;送结果MOV AH,4CHINT 21H ;返回DOS CODE ENDS END START,2多重循环程序设计,(混合控制法),【例】编写程序实现下列功能:统计一个字符串对应的ASCII码串中二进制“”的个数。,【分析】这需要循环嵌套,外循环对
5、n个字符进行 循环操作,内循环对每个字符中的“1” 统计。,DAT SEGMENTSTR1 DB ABCDEFGN EQU $-STR1NUM DB ? DAT ENDSCOD SEGMENTASSUME CS:COD,DS:DAT,MAIN PROC FAR PUSH DSSUB AX,AX PUSH AX MOV AX,DATMOV DS,AX,;内务操作,MOV AL,0MOV NUM,ALMOV SI,OFFSET STR1MOV CL,N LOP1: LODSB LOP2: CMP AL,0JE LOP3SHL AL,1JNC LOP2INC NUMJMP LOP2 LOP3: DE
6、C CLJNZ LOP1 EXT: RET,;功能实现,COD ENDSEND MAIN,思考题,从内存SCORE单元开始,连续存放着10个学生的某门课成绩。编写程序统计90100, 7079, 6069, 60以下各段人数。并将结果放在数据段、偏移地址为RESULT开始的顺序单元中。试编程序,求该班这门课的平均成绩为多少,并放在该数据段的AVER单元中。要求显示结果。,DATA SEGMENTSCORE DB 91,85,77,86,65,82,95,79,56,100RESULT DB 4 DUP(?) AVER DB ? DATA ENDS,阅读材料,复习课本P189191 例4.56 例4.57,作业:P222 将18、19做作业本上,预习:例4.55、例4.60、例4.58,