资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。,一、问题解答及课程导入,汇编语言,1/20,1、学生网上提问:,REPE和CMPS串比较指令使用方法,2/20,与REPE/REPZ和REPNE/REPNZ,联合工作CMPS和SCAS指令,*REPE/REPZ 当相等/为零时重复串操作,格式:REPE(或REPZ)CMPSB,REPE(或REPZ)CMPSW,执行操作:,1)如(CX)=0或ZF=0时退出,不然往下执行。,2)(CX),(CX)-1,3)执行其后串指令,4)重复13,3/20,例:两个字串比较,DATA SEGMENT,STRING1 DB STUDENT,STRING2 DB STUDENT,DATA ENDS,要求:源串首址在SI中,,目标串首址在DI中。,CX存放比较次数。,LEA SI,STRING1,LEA DI,STRING2,MOV CX,5,REPE CMPSB,4/20,2、归纳循环结构各种形式,(1)用条件转移指令实现,(2)重复前缀REP/REPE/REPNE,(3)LOOP/LOOPE/LOOPNE,(4)前提是循环次数确实定。用CX存放循环次数。,5/20,例 有一首地址为ARRAYM字数组,试编写一程序;求出该数组元素累加和(不考虑溢出),并把结果存入TOTAL中。,6/20,ARRAY DW 12,43,17,35,87,M DW 5,MOV CX,M,MOV AX,0,MOV SI,AX,REPTSUM:,ADD AX,ARRAYSI,ADD SI,2,DECCX,JNZREPTSUM,MOV TOTAL,AX,(1)用条件转移指令实现循环,7/20,(3)采取LOOP指令实现循环,ARRAY DW 12,43,17,35,87,M DW 5,MOV CX,M,MOV AX,0,MOV SI,AX,REPTSUM:,ADD AX,ARRAYSI,ADD SI,2,LOOP REPTSUM,MOV TOTAL,AX,8/20,5.3 多重循环,一、多重循环结构,1、内循环和外循环控制,需要两个循环控制变量:I,J,多重循环嵌套时,不允许内外循环,交叉,外循环入口,内循环入口,内循环出口,外循环出口,LOOP AA2,LOOP AA1,AA2:,AA1:,9/20,2、内循环和外循环跳转,循环转移,:,只允许从,内,向,外,跳转,不允许从,外,向,内,跳转,10/20,例:有一个首地址为AN字数组,请编制程序使该数组中数按从大到小次序整序。,序号 数,8,5,16,84,32,比较遍数,1 2 3,8 16 84,84 32,84 32 16,8 8,5 5 5,二、多重循环举例,排序程序:算法起泡排序法,11/20,起泡排序算法程序框图,开始,(COUNT1)N-1,(COUNT2)(COUNT1),I 0,N,Y,AIAI+1?,AI AI+1,I=I+1,(COUNT2)(COUNT2)-1,(COUNT2)=0?,N,(COUNT1)=0?,(COUNT1)(COUNT1)-1,Y,结束,N,Y,12/20,起泡排序算法程序实现,datarea segment,a dw 8,5,16,84,32,n dw 5,datarea ends,prognam segment,main proc far,assume cs:prognam,ds:datarea,start:,push ds,13/20,xchg ax,abx+2,mov abx,ax,cotinue:add bx,2,loop loop2,mov cx,di,loop loop1,ret,main endp,prognam ends,end start,sub ax,ax,push ax,mov ax,datarea,mov ds,ax,mov cx,n,dec cx,loop1:mov di,cx,mov bx,0,loop2:mov ax,abx,cmp ax,abx+2,jge cotinue,14/20,数组TABLE中存放8个小写字母computer。编程序,将它们按升序排序。,排序结果为(cemoprtu),三、多重循环练习,排序程序:算法起泡排序法,15/20,起泡排序算法练习答案,datarea segment,TABLE db computer,n dw 8,datarea ends,prognam segment,main proc far,assume cs:prognam,ds:datarea,start:mov ax,datarea,mov ds,ax,16/20,mov cx,n,dec cx,loop1:mov di,cx,mov bx,0,loop2:mov,al,TABLEbx,cmp,al,TABLE,bx+1,jbe cotinue,xchg al,tablebx+1,mov tablebx,al,cotinue:,add bx,1,loop loop2,mov cx,di,loop loop1,mov ah,4ch,int 21h,main endp,prognam ends,end start,17/20,例:在附加段中有一个字数组,其首地址已存放在DI存放器中,在数组第一个字中存放着该数组长度。要求编制一个程序是该数组中数按照从小到大次序排列整齐。,四、依据标志位起泡排序算法,依据标志位起泡排序算法程序实现:,18/20,data segment,save_cnt dw?,start_addr dw?,data ends,Extra segment,A dw 5,8,5,16,84,32,Extra ends,prognam segment,bubble proc far,assume cs:prognam,ds:data,es:extra,push ds,push cx,push ax,push bx,mov ax,data,mov ds,ax,mov ax,extra,mov es,ax,lea di,a,mov start_addr,di,mov cx,es:di,mov save_cnt,cx,init:,mov bx,1,dec save_cnt,jz sorted,mov di,start_addr,19/20,next:add di,2,mov ax,es:di,cmp es:di+2,ax,jae cont,xchg es:di+2,ax,mov es:di,ax,sub bx,bx,cont:loop next,cmp bx,0,je init,sorted:mov di,tart_addr,pop bx,pop ax,pop cx,pop ds,bubble endp,prognam ends,end,20/20,
展开阅读全文