汇编-第7章 循环程序设计_第1页
汇编-第7章 循环程序设计_第2页
汇编-第7章 循环程序设计_第3页
汇编-第7章 循环程序设计_第4页
汇编-第7章 循环程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章循环程序设计涉及到的循环指令:

LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE

LOOP指令的执行步骤:

(1)(CX)←(CX)-1(2)检查是否满足测试条件,如满足则

(IP)←(IP)+8位位移量,实行循环;不满足则IP不变,退出循环。循环指令:LOOPOPR测试条件:(CX)0为零或相等时循环指令:LOOPZ(LOOPE)OPR测试条件:ZF=1且(CX)0不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR测试条件:ZF=0且(CX)0LOOPAGAIN

DECCXJNZAGAINAGAIN是一个地址标号循环程序的结构DO-WHILE结构控制条件初始化循环体YN控制条件初始化循环体YNDO-UNTIL结构初始化:设置循环的初始状态循环体:循环的工作部分及修改部分控制条件:计数控制特征值控制地址边界控制用分支指令控制循环例1:在STR开始的缓冲区中存放有一个字符串,计算该字符串的长度并存入LEN单元。DATASEGMENTSTRDB’computer$’LENDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXLEASI,STR ;串首地址

XORBL,BL ;计数器清0LOP:MOVAL,[SI] ;取一个字节

CMPAL,24H ;和’$’进行比较

JZSTOP ;相等则结束

INCBL ;否则计数器加1INCSI ;地址指针加1JMPLOP ;转回到LOPSTOP:MOVLEN,BL ;存储字符个数

MOVAH,4CHINT21HCODEENDS ENDSTARTNY=‘$’?存串长度取串元素置指针、串长度初值为0开始结束串长度加1修改地址指针用专用的循环指令控制循环例2:求以BUF为首地址的10个内存单元的无符号数据和。已知其和小于等于255,将结果存入第11个内存单元DATASEGMENTBUFDB12H,38H,46H,0BH,09H,41H,32H,56,02H,26HRESDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXMOVAL,0 ;存放累加之和

MOVCX,0AH ;累加次数

LEABX,BUF ;数据表的首地址

LP:ADDAL,[BX] ;累加

INCBX ;地址增1 LOOPLP;若CX-1不为0,则继续循环

MOVRES,AL ;CX-1=0,则存累加和

MOVAH,4CHINT21HCODEENDS ENDSTARTNYCX=0?AL清0送结果取数累加修改地址指针、计数值减1开始结束例3:在字节数组中找出第一个非0的数据,并将其下标存入RES单元,假设其下标值小于10DATASEGMENTARRDB0,0,38H,46H DB89H,67H,0H,92HCNTEQU$–ARRRESDW?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CNT;循环次数

MOVDI,-1;数组下标从0开始AGAIN:INCDICMPARR[DI],0;和0比较

LOOPZAGAIN;为0且没比较完,则循环

JZEXIT;比较完仍为0,转EXITMOVRES,DI;找到了,送下标号

EXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNCX=0?YN修改地址指针计数值减1Y送结果=0?初始化取数比较开始结束例4:在字符串中从前向后查找空格字符(ASCII码为20H),找到显示Y,否则就显示NDATASEGMENTSTRDB‘ASDFKLIOOP’LENEQU$–STRDATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVCX,LENMOVSI,-1MOVAL,20HNEXT:INCSICMPAL,STR[SI] LOOPNENEXTJNZNFINDMOVDL,’Y’MOVAH,2INT21HJMPEXIT NFIND:MOVDL,’N’MOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNYNY取数=20H?CX=0?显示‘Y’修改地址指针计数值减1显示‘N’初始化开始结束用计数器控制循环例5:已知数据块的长度,统计数据块中正数和负数的个数DATASEGMENTBUFDB–32,25,36,-18,-64,0,-3COUNTEQU$-BUFPLUSDB?;存放正数个数MINUSDB?;存放负数个数DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBL,0;负数个数

MOVDL,0;正数个数

MOVSI,OFFSETBUF

MOVCX,0;循环初值

LOP1:MOVAL,[SI];取值CMPAL,0;和0比较

JGENEXT0;大于等于0转移

INCBL;小于0,BL加1JMPNEXT1NEXT0:INCDL ;大于等于0,DL加1NEXT1:INCSI;指针加1INCCX;计数加1CMPCX,COUNT;比较次数

JLLOP1;没结束,则继续

MOVMINUS,BL;存负数个数

MOVPLUS,DL;存正数个数

MOVAH,4CHINT21HCODEENDSENDSTART例6:将BUF单元开始的100个字节存储单元全部清0DATASEGMENTBUFDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETBUF;地址指针

MOVCX,64H;计数初值

LP:MOVBYTEPTR[BX],0;清0 INCBX;地址加1LOOPLP;减1不为0,则继续

MOVAH,4CHINT21H CODEENDS ENDSTARTNY内存单元清0CX=0?修改指针,计数值减1初始化开始结束按问题的条件控制循环例7:记录某个字节存储数据单元中1的个数,并把结果存入RES中。YNYN=0?取数CF=0?移位计数加1开始结束DATASEGMENTNUMDB75HRESDB?DATAENDS CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXMOVBL,NUM XORDL,DLAGAIN:TESTBL,0FFHJZNEXTSHRBL,1ADCDL,0JMPAGAINNEXT:MOVRES,DLMOVAH,4CHINT21H CODEENDS ENDSTART按逻辑变量控制循环例8:在以BUF为起始地址的内存中放有若干个字节型无符号数,假定逻辑变量的长度为一个字节(其值为10010101

),若它的D0~D7位对应着BUF~BUF+7单元内容的运算。即某位为0,则将相应单元内容的最高位求反,其它位不变;而某位为1,则将相应单元内容之高低四位互换。Y读数据修改地址指针初始化D7求反,其余位不变传递处理结果N变量读完?YN变量一位=0?数据高低四位互换开始结束SHRCH,1JNCNEXTMOVCL,4ROLAL,CLJMPRESNEXT:XORAL,80HRES:MOV[BX],ALINCBXDECAHJNZLPMOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENTBUFDB75H,12H,87H,98HDB81H,56H,73H,51HBEQU8CEQU10010101BDATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,BMOVCH,CLEABX,BUFLP:MOVAL,[BX]多重循环程序设计应用举例例9:设在以EXST为首址的存储区中依次存放着某考区245个理科生的七门成绩,现要统计每个考生的总成绩,并将其存放在该考生单科成绩之后的两个单元首址送SI,学生数(外循环次数)送BL

取数累加,修改地址,内循环计数减1SI+1送SI,课程数(内循环次数)送CX

修改地址指针,指向下一个学生NY存总分NYBL-1=0?CX-1=0?开始结束DATA

SEGMENTEXSTDB01,75,82,84,92,78,49,85,00,00 DB02,83,92,63,76,82,58,69,00,00…

DATA

ENDSCODE

SEGMENT

ASSUMECS:CODE,DS:DATA

MOVAX,DATAMOVDS,AX

START:LEASI,EXST ;数据表首地址

MOVBL,245

;245个学生,外循环次数

LOP2:MOVCX,7

;七门课成绩,内循环次数XORAX,AX ;清0,存总成绩

INCSI

;跳过准考证号

LOP1:ADDAL,[SI] ;单科成绩累加ADCAH,0 ;加进位位

INCSI ;修改地址指针

LOOPLOP1

;没累加完单科成绩,则继续

MOVWORDPTR[SI],AX;累加完,存总成绩

INCSI ;条过存总成绩的2个单元INCSIDECBL ;外循环次数减1JNZLOP2 ;不为0,则求下个学生总成绩

MOVAH,4CH

INT21HCODE

ENDS

ENDSTART例10:将N个不同的无符号数a1,a2,...,an由小到大进行排序。若每个数占一个字,则N个数可定义如下:

ADWa1,a2,a3,...,an。它们的内存分配分别为A[0],A[2],A[4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论