文档详情

微机原理及应用3-8.ppt

发布:2017-06-22约8.13千字共44页下载文档
文本预览下载声明
程序如下: DATA SEGMENT LOGRL DW 0000011100111101B;定义逻辑尺 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,LOGRL; 传送逻辑尺刻度 MOV CX,16;传送逻辑尺长度 NEXT1: SAL DX,1; 左移,最高位送CF JC NEXT2 ; CF=1转移? MOV DL,‘A’;CF=0,输出字符A MOV AH,2 INT 21H JMP NEXT3;转NEXT3,本分支结束 NEXT2: MOV DL,‘B’;CF=1,输出字符B MOV AH,2 INT 21H NEXT3: LOOP NEXT1;CX不为0,继续循环 MOV AH,4CH INT 21H CODE ENDS ? END START ? 四、多重循环程序的设计 例4,排序程序设计。将BUFF缓冲区中的数组按增序(由小到大)排序。 排序算法之一——气泡法(设有N个数据) 外循环FOR J=N-1 TO 1(处理N-1次) 内循环FOR K=N TO N-J+1(处理J次) 循环重复操作:XK与XK-1比较 若XK-1> XK,则XK-1? XK,否则不交换 (每个内循环均使最小数上升到最小地址) 另外,用BL=00H作为结束标志,当某个 内循环没有进行任何交换,说明序已排好。 X1 X2 X3 X4 X5 X6 SI→ S CX←N(次数) SI←BUFF末+1 BL←0FFH BL=00H? BL=00H CX=CX-1 CX=0? CX,SI入栈 SI←SI-1 [SI] ≥[SI-1]? BL=0FFH [SI] ? [SI-1] CX-1≠0? 弹出SI,CX S DONE LOOPA LOOPB NEXT Y N Y N Y N Y N 多重循环的使用方法 STACK SEGMENT STACK; DW 256 DUP(?); TOP LABEL WORD; STACK ENDS DATA SEGMENT; BUFF DB 6 DUP(?); DATA ENDS; CODE SEGMENT; ASSUME CS:CODE,DS:DATA,SS:STACK; START: MOV AX,DATA; MOV DS,AX; MOV AX,STACK; MOV SS,AX; MOV SP,OFFSET TOP; MOV CX,LENGTH BUFF;取数组长度 ADD SI,CX;BUFF的末地址+1 MOV BL,0FFH; LOOPA:CMP BL,00H; JE DONE; MOV BL,00H; DEC CX; JCXZ DONE; PUSH CX; PUSH SI; LOOPB:DEC SI; MOV AL,[SI]; CMP AL,[SI-1]; JG NEXT; XCHG AL,[SI-1]; MOV [SI],AL; MOV BL,0FFH; NEXT: LOOP LOOPB; POP SI; POP CX; JMP LOOPA; DONE: MOV AH,4CH INT 21H; CODE ENDS; END START S CX←N(次数) SI←BUFF末+1 BL←0FFH CX←CX-1 CX=0? CX,SI入栈 SI←SI-1 AL ≥[SI-1]? BL←00H AL ? [SI-1] [SI]←AL CX≠0? 弹出SI,CX END DONE LOOPA LOOPB NEXT Y N N Y N Y N 多重循环的使用方法 AL←[SI] 1 1 CX←CX-1 2 2 BL=0FFH? Y 排序算法之二(设有N个数据) 外循环FOR J= 1 TO N-1(处理N-1次) 内循环FOR K=J+1 TO N(处理N-J次) 内循环重复操作:XJ与XK比较 若XJ> XK,则XJ? XK,否则不交换
显示全部
相似文档