您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章汇编语言程序设计3
微型计算机原理及应用张丹制作4.5循环结构程序设计4.5.1循环结构程序的提出4.5.2循环结构程序的组成4.5.3循环控制指令4.5.4单重循环程序举例4.5.5多重循环程序设计4.5.1循环结构程序的提出【例】设内存DATA1和DATA2开始分别存放50个无符号字数据,编制程序将两个存储区对应字数据求和并存入SUM开始的单元。DATA1DATA2SUM···M···1.直接寻址MOVAX,DATA1+2ADDAX,DATA2+2MOVSUM+2,AX2。寄存器间接寻址LEABX,DATA1LEASI,DATA2LEADI,SUMADDBX,2ADDSI,2ADDDI,2MOVAX,[BX]ADDAX,[SI]MOV[DI],AXDATA1DATA2SUM···M···3.基址、变址寻址MOVBX,2MOVSI,2MOVDI,2MOVAX,DATA1[BX]ADDAX,DATA2[SI]MOVSUM[DI],AXLEABX,DATA1LEASI,DATA2LEADI,SUMMOVAX,[BX]ADDAX,[SI]MOV[DI],AXADDBX,2ADDSI,2ADDDI,2MOVAX,[BX]ADDAX,[SI]MOV[DI],AXADDBX,2ADDSI,2ADDDI,2:修改如下::LEABX,DATA1;初始化部分LEASI,DATA2LEADI,SUMMOVCX,50BEG:MOVAX,[BX];工作部分ADDAX,[SI]MOV[DI],AXADDBX,2;修改部分ADDSI,2ADDDI,2DECCX;控制部分JNZBEG:修改后,程序的书写及源程序输入的时间间大大缩短,且节省机器汇编时间,节省目标代码占用的存储空间。在程序设计中,控制某个程序段重复执行一定次数的程序设计方法,称为循环程序设计,由此设计出的程序,称为循环结构程序。4.5.2循环结构程序的组成一个循环结构程序由四部分组成:1.初始化部分该部分是使循环能正确进行而做的准备工作,它包括:数据指针置初值,计数器置初值,寄存器、存储器置初值。2.循环工作部分工作部分是循环的主体,是题目所要完成的功能。3.循环修改部分修改数据指针,以使参加运算的数据和结果每次都能正确。4.控制部分控制程序按预定的循环次数或条件正常的循环和退出循环。值得注意的是:初始化部分只能执行一次,否则不能得到正确结果或者出现死循环LEABX,DATA1;初始化部分LEASI,DATA2LEADI,SUMMOVCX,50BEG:MOVAX,[BX];工作部分ADDAX,[SI]MOV[DI],AXADDBX,2;修改部分ADDSI,2ADDDI,2DECCX;控制部分JNZBEG:循环体开始初始化工作部分修改部分控制部分结束循环体至少执行一次开始初始化控制部分工作部分修改部分结束循环体可能一次也不执行4.5.3循环控制指令循环控制指令共有4条,其共同特点是:隐含指定CX作为循环计数器。1.LOOP重复控制指令格式:LOOP标号操作:CX←CX–1,若CX≠0,则转到标号所指语句执行,否则退出循环,执行后续语句。4.5.4单重循环程序举例1.如果一个循环程序的循环体内是由顺序结构或分支结构组成,那么这个程序称为单重循环程序。2.如果一个循环程序的循环体内还包含有一个或多个循环结构的程序,那么这个程序称双重或多重循环结构程序。循环结构程序设计时,主要考虑的:1.分析问题,找到重复执行的程序段(工作部分)2.在此基础上,分析程序段中的那些值在下一次执行时需要修改,怎样修改?(修改部分)3.分析循环结束条件(控制部分)4.最后考虑第一次执行工作部分时,相关寄存器的初值(初始化部分)循环程序的控制方法计数法条件控制法开关控制法逻辑尺控制法方法适合于循环次数已知适合于循环次数未知计数法(1)正计数法MOVCX,0;计数器初值为0AGAIN::;循环体工作部分INCCXCMPCX,N;N为循环次数JNEAGAIN(2)倒计数法MOVCX,N;计数器初值设为循环次数NAGAIN::;循环体:LOOPAGAIN从上两例可看出,正计数法和倒计数法在逻辑上没有任何区别,而倒计数法实现起来较简单,因此常用。【例】求1+2+3+…+100,并将结果放入RESULT单元中。【例】统计由DATA开始的字节数据块中负元素的个数,数据个数在COUNT字单元,统计结果存入RLT单元。统计负元素的个数,实际上就是检查每个数符号位为“1”的数的个数,这是一项重复工作,可用循环程序来实现。设置地址指针、计数器初值结果寄存器清0取一个数送AL数据0?Y结果计数器增1修改地址指针N处理完?Y保存结果NDSEGSEGMENTDATADB-1,3,-5,……COUNTDW50RLTDW0DSEGENDSCSEGSEGMENTASSUME……ATART:MOVAX,DSEGMOVDS,AXMOVBX,OFFSETDATAMOVCX,COUNTMOVDX,0AGAIN:MOVAL,[BX]ANDAL,ALJNSPLUSINCDXPLUS:INCBXLOOPAGAINMOVRLT,DXMOVAH,4CH:【例】已知数据段从2100H~21FFH单元存放若干个无符号字数据,编程求出其中的最大值,并放入MAX字单元中。
本文标题:第4章汇编语言程序设计3
链接地址:https://www.777doc.com/doc-3381527 .html