第5-2章循环程序设计.ppt
《第5-2章循环程序设计.ppt》由会员分享,可在线阅读,更多相关《第5-2章循环程序设计.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第六章第六章循环程序设计循环程序设计 设问:设问:1怎样用分支结构构成循环?怎样用分支结构构成循环?2循环指令有哪些?循环指令有哪些?3串处理操作是循环执行的吗?串处理操作是循环执行的吗?4.4.多重循环有什么特点?多重循环有什么特点?5.5.如何实现排序如何实现排序?本章重点本章重点循环的概念循环的概念循环指令循环指令串处理串处理多重循环多重循环6.1循环的概念循环的概念 在汇编语言中,程序的循环可以用在汇编语言中,程序的循环可以用分支转移指令实现,也可以用分支转移指令实现,也可以用8086指指令系统中提供的专门的循环指令,这令系统中提供的专门的循环指令,这样使程序更清晰、简便。样使程序更
2、清晰、简便。除了循环指令之外,还有很多地方用除了循环指令之外,还有很多地方用到了循环的概念。例如串处理,需要到了循环的概念。例如串处理,需要对串中的字符循环地进行操作。对串中的字符循环地进行操作。6.1.1循环结构循环结构循环结构有两种形式。一种是循环结构有两种形式。一种是DOWHILE结构,结构,另一种是另一种是DOUNTIL结构。结构。循环程序循环程序有有三部分:三部分:l l设置循环的初始状态设置循环的初始状态l l循环体循环体l l 循环控制部分循环控制部分6.1.1循环程序例子循环程序例子示例示例6-1在在5行行16列上用写显存方法显列上用写显存方法显示多彩字符串。用循环指令实现。示
3、多彩字符串。用循环指令实现。运行结果:运行结果:设计思路:设计思路:(1)用)用DH存放行号,存放行号,DL存放列号;存放列号;(2)BL存放字符属性,第存放字符属性,第1个字符的属性为个字符的属性为4,红色;其他字符属性,红色;其他字符属性+1改变;改变;(3)字符的位置计算公式:行号)字符的位置计算公式:行号*160+列号;列号;(4)用循环指令)用循环指令LOOP实现将多彩字符串循环实现将多彩字符串循环写入显存。写入显存。程序如下:程序如下:;6-1.asm在在5行行16列上用写显存方法显示多彩字符列上用写显存方法显示多彩字符串。串。datasegmenta1dbHelloworld!a
4、2db0dataendscodesegmentassumecs:code,ds:datastart:movdh,5;行行movdl,16;列列movbl,4;属性属性movax,datamovds,axmovsi,0show_str:movax,0b800h;显存首址显存首址moves,axmovax,160muldh;行号行号*160movdi,ax;起始行位置起始行位置saldl,1movdh,0adddi,dx;+列号列号movcx,a2-a1;字符串长度字符串长度let1:moval,si;循环写字符和属性到显存循环写字符和属性到显存moves:di,almovbyteptres:di
5、+1,blincsiincbladddi,2;写完即显示完写完即显示完looplet1;循环指令循环指令movah,4chint21hcodeendsendstart6.2循环指令循环指令格式:格式:LOOPOPR执行的操作:执行的操作:(CX)=(CX)-1,若,若CX0,跳转跳转到标号到标号OPR处循环执行,处循环执行,CX=0则执行则执行LOOP的下一条指令。的下一条指令。说明:目的操作数说明:目的操作数OPR是标号,该标号处的是标号,该标号处的指令应该在指令应该在LOOP指令之前,以构成循环指令之前,以构成循环。6.2.1LOOP循环指令循环指令例例1求求X=1+2+3+10的累加值。
6、的累加值。MOVAL,0MOVBL,1MOVCX,10SS1:ADDAL,BLINCBLLOOPSS1MOVX,AL6.2.2LOOPZ/LOOPE格式:格式:LOOPZ/LOOPEOPR执行的操作:执行的操作:(CX)=(CX)-1,若,若CX0,并且并且ZF=1则跳转到标号则跳转到标号OPR处循环执行,若处循环执行,若CX=0,或者或者ZF=0则执行则执行LOOP的下一条指的下一条指令。令。说明:结果为说明:结果为0或相等循环。当执行到或相等循环。当执行到LOOPZ/LOOPE时,如果之前的指令结果为时,如果之前的指令结果为0或者相等时继续循环,如果结果不为或者相等时继续循环,如果结果不为
7、0或者或者不相等,提前退出循环,即使计数值不相等,提前退出循环,即使计数值CX还没还没减为减为0。STRINGDB*P*MOVCX,10MOVBX,-1MOVAL,0SS3:INCBXCMPSTRINGBX,*LOOPESS3MOVY,BX例例110个星号字符的个星号字符的STRING串中有一个串中有一个字符不是星号,找出该字符的位置,保存字符不是星号,找出该字符的位置,保存在在Y单元。单元。MOVBX,-1MOVCX,MSS4:INCBXMOVAL,ALPHABXTESTAL,20HLOOPZSS4MOVDL,AL例例2取取出出字字母母串串ALPHA中中的的第第一一个个小小写字母放入写字母放
8、入DL。格式:格式:LOOPNZ/LOOPNEOPR执行的操作:执行的操作:(CX)=(CX)-1,若,若CX0,并且并且ZF=0则跳转到标号则跳转到标号OPR处循环执行,若处循环执行,若CX=0,或者或者ZF=1则执行则执行LOOP的下一条指令。的下一条指令。6.2.3LOOPNZ/LOOPNE说明:结果不为说明:结果不为0或不相等循环。或不相等循环。当执行到当执行到LOOPNZ/LOOPNE时,如果之前的时,如果之前的指令结果不为指令结果不为0或者不相等时继续循环,如果或者不相等时继续循环,如果结果为结果为0或者相等,提前退出循环,即使计数或者相等,提前退出循环,即使计数值值CX还没减为还
9、没减为0。MOVBX,0MOVAH,1SS5:INT21HMOVSYMBOLBX,ALINCBXCMPAL,0DHLOOPNESS5MOVAX,0例例1循循环环输输入入字字符符,并并将将字字符符保保存存在在SYMBOL数组中,当输入回车时结束。数组中,当输入回车时结束。MOVBX,-1MOVCX,MSS6:INCBXCMPSYMBOLBX,ALOOPNESS6ORSYMBOLBX,20H例例2在在长长度度为为M的的字字符符串串SYMBOL中中查查找大写字母找大写字母A,找到后将其变为小写。找到后将其变为小写。练习:练习:1写出计算写出计算Y=5!的程序段。的程序段。2写写程程序序段段。查查找找
10、CATT表表中中的的字字符符”,找找到到后后将将其其保保存存到到SIGN单单元元,其其位置值保存到位置值保存到ADDI单元。单元。3写写程程序序段段。在在长长度度为为N的的字字数数组组VALUE中取出第一个负数保存到中取出第一个负数保存到AX中。中。6.3串处理串处理在汇编语言中,可将连续的在汇编语言中,可将连续的n个存储单个存储单元称为串、表、数组等。元称为串、表、数组等。对于这种数据结构的操作称为串处理。对于这种数据结构的操作称为串处理。对串进行操作,需要几个参数,如串对串进行操作,需要几个参数,如串的长度、串的起始单元地址等;而且的长度、串的起始单元地址等;而且串操作大都是循环执行的,循
11、环如何串操作大都是循环执行的,循环如何控制、串的存取方式等都不同于其它控制、串的存取方式等都不同于其它数据操作。数据操作。6.3.1串的概念串的概念6.3.2串处理例子串处理例子设计思路:设计思路:(1)分别定义数据段和附加段;)分别定义数据段和附加段;(2)用)用SI保存源串保存源串STRG1的偏移地址,的偏移地址,DI保存目的串保存目的串STRG2的偏移地址,传送个数的偏移地址,传送个数由由CX指出;指出;(3)用)用CLD指令将方向标志指令将方向标志DF清清0,以便,以便从低地址单元开始取数,依次地址增加,从低地址单元开始取数,依次地址增加,取下一数;取下一数;(4)用)用REPMOVS
12、B指令实现串传送。指令实现串传送。示例示例6-2将数据段中的字符串将数据段中的字符串STRG1传送到传送到附加段的附加段的STRG2中。中。程序如下:程序如下:;6-2.asm串传送串传送datasegmentstrg1db1234567890dataendsextrasegmentstrg2db10dup(?)extraendscodesegmentassumecs:code,ds:data,es:extrastart:movax,datamovds,axmovax,extramoves,axleasi,strg1leadi,strg2cld;方向标志清方向标志清0movcx,10repmo
13、vsb;以字节形式重复传送以字节形式重复传送CX次次movah,4chint21hcodeendsendstart运行结果:运行结果:要观察运行结果,采用要观察运行结果,采用DEBUG执行执行6-2.exe。在。在DEBUG下,用下,用U命令查看,找到断点命令查看,找到断点0018,用,用G0018执行,再用执行,再用DES:0命令查看传送结果。命令查看传送结果。此时,数据段的段地址为此时,数据段的段地址为0B45H,而附加而附加段的段地址为段的段地址为0B46H。查看的结果在附查看的结果在附加段中。加段中。思考:如果采用循环指令实现串传送,思考:如果采用循环指令实现串传送,程序如何改写?程序
14、如何改写?6.3.3串处理指令串处理指令8086汇编语言指令系统中提供了汇编语言指令系统中提供了5种串处理指令。种串处理指令。分别是:分别是:MOVS(movestring)串传送串传送CMPS(comparestring)串比较串比较SCAS(scanstring)串扫描串扫描LODS(loadstring)串获取串获取STOS(storestring)串存入串存入上述串指令应该和重复前缀上述串指令应该和重复前缀REP、REPZ/REPE、REPNZ/REPNE结合结合.例例比较两个字串比较两个字串BUNCH1和和BUNCH2是否相同,相是否相同,相同打印同打印Y,不相同打印不相同打印N。示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 程序设计
限制150内