《循环程序举例.docx》由会员分享,可在线阅读,更多相关《循环程序举例.docx(8页珍藏版)》请在优知文库上搜索。
1、循环程序举例例4.3.1已知9个数字,找出第一个不能够被3整除的数,并且显示其在数列中的位置设计思路:逐个推断每一个数是否能被3整除,假如不能被3整除,愉出其所在位置,结束;否则接着推断下一个。本程序中当一个数除以3余数不为O时ZF=O,遇1.OOPZ指令跳出循环1.OOPZ实例源程序如下:NAMEEX9-8DATASEGMENTARRAYDB0,0,0,3,0,0,4,34,25,30COUNTIEQUS-OFFSETARRAYDATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODEBEGIN:MOVAX,DATAMOVDS,AXMOVCX,COUNTMOVDI1OF
2、FFFH;-I=DINEXT:INCDIMOVA1.1.,0MOVA1.,ARRAYDIMOVBH,3D1.VBHCMPAH,01.OOPZNEXTJNEOKENTRYMOVD1.,N;没找到JMPDISP1.AY;显示输出一个零OKENTRY:MOVDX,D1.;显示非零元素的下标(DI)ORD1.,3011DISP1.AY:MOVA1.1.,02HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN例4.3.2已知9个数字,找出第一个能够被3整除的数,并且显示其在数列中的位置设计思路:逐个推断每一个数是否能被3整除,假如能被3整除,输出其所在的位置,结束;否则接着推断
3、下一个程序说明:本程序中一个数除以3后,余数为O时置ZF=I,遇1.OOPNE时跳出循环1.OOPNE/1.OOPNZ实例源程序如下:NAMEEX9_9DTSEGMENTARRAYDB1,4,5,9,0,O,4,34,25,30COUNTEQU$-0FFSETARRAYDATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODEBEGIN:MOVAX,DATAMOVDS,AXMOVCX,COUNTMOVDI,OFFFFH:-I=DINEXT:INCDIMOVAH,0MOV1.,RRYDIMOVBH,3DIVBHCMPAH,01.OOPNENEXTJEOKENTRYMOVD1
4、.,DISP1.AY;没找到;显示输出一个零JMPOKENTRY:MOVDX,DI;显示非零元素的下标(DI)INT21HORD1.30HDISP1.AY:MOVAH,02HMOVAH,4CHINT2IHCODEENDSENDBEGIN例4.3.3已知9个数字,找出全部不能够被3整除的数,并且显示其在数列中的位置。设计思路:找到不能被3整除的数后,接着推断下一个,而不是终止推断。JCXZ示例源程序如下:NAMEEX910DATASEGMENTARRAYDB1,2,0,3,O,O,4,34,25,30COUNTEQUS-OFFSETRRYDATAENDSCODESEGMENTASSUMEDS:D
5、ATA,CS:CODEBEGIN:MOVX,DATAAXMOVCX1COUNTMOVDI,OFFFFH;-I-DINEXT:INCDIMOVH,OMOVA1.,ARRAYDIMOVBH,DIVBHCMPH,JENOENTRYOKENTRY:MOVDX,DIORD1.,30HDISP1.AY:MOVH,02HINT2IHMOVD1.,INT21HNOENTRY:DECCXJCXZEXITJMPNEXTEXIT:MOVH,4CHINT21HCODEENDSENDBEGIN例4.3.4编程序计算S=1+2+3+4+100,并且以十进制形式输出结果源程序如下:NAMEEX911CODESEGMENTA
6、SSUMECS:CODESTART:MOVBX,1MOVX,OMOVCX,1001.:DDX,BXINCBX1.oOP1.MOVCX,AX将结果进行二化十输出MOVD1.,1.I:CMPCX,100O100O与CX比较JNAE1.2INCD1.SUBCX,100OJMP1.1.1.2:ORD1.,30HMOVH,02HINT21HMoVD1.01.3:CMPex,100:100与C)(比较JNE1.4INCD1.SUBCX,100JMP1.31.4:ORD1.,30HMOVAH,02HINT2IHMOVD1.01.5:CMPCX,10;10与CX比较JNE1.6INCD1.SUBCX,10JM
7、P1.51.6:ORD1.,30HMOVH,02HINT21HMOVD1.,C1.ORD1.,30HMOVAH,02HINT21HMoVAH,4CHINT21HCODEENDSENDSTART例4.3.5题目:输入39之间的一个数n,输出一个由*组成的三角形源程序如下:.MODE1.SMA1.1.STACK200H.CODEBEGIN:MOVAH11;读入一个字符INT21HCMPA1.,33H;非09重新输入JBBEGINCMP1.,39HJBEGINSUBA1.,30H;ASCII转二进制数MOVC1.A1.;循环次数送C1.MOVCH,0CU置OMOVAH,2MOVD1.,ODH;输出回
8、车、换行INT21HMOV)1.,OAHINT21H1.I:PUSHCX;外层循环次数压栈爱护,同时CX作为新的内层循环次数1.2:MOVD1.,*;输出n个*MOVAH,2INT2IH!.OOP1.2MOVD1.,ODH;输出回车、换行INT21HMOVD1.,OHINT2IHPOPCX;回复外层循环次数1.OoP1.1.;外层循环次数减1,不为0转1.1.MOVH,4CH;为0结束INT21HENDBEGIN例4.3.6题目:输入39之间的一个数n,输出一个由*组成的口字形源程序如下:.MODE1.SMA1.1.STACK200H.CODEBEGIN:MOVAH,1;读入39数字符号INT
9、21HCMP1.,33H:非39重新输入JBBEGINCMPA1.39HJABEGINSUBA1.,30H;是39,n换成2进制数MOVC1.,1.;n送C1.MOVCH,0;0送CH,循环次数在CXMOVBX,CX;n送BXMOVAH,2;输出回车、换行,使输出到下一行MOVD1.,ODHINT21HMOVD1.,OAHINT21H1.3:MOVD1.,*;输出上边框n个*MOVH,2INT21H1.OOP1.3MOVD1.,ODH;输出回车、换行INT21HMOVD1.,OAHINT21HMOVCX,BX;取n到CXSUBCX,2;n-2送CX,作为中间n-2行的循环计数1.I:PUSHC
10、X;起先除第1行和最终一行外,中间n-2行循环计数,;因内层循环也用CX计数,故压栈爱护外层循环计数MOVD1.,;输出中间行最左边的*MOVAH,2INT21HMOVCX,BXSUBCX,2;中间行每行n-2个*的内层循环计数1.2:MOVD1.,MOVH,2INT2IH1.OOP1.2;内层循环输出n-2个*MOVD1.,MOVAH12INT21HMOVD1.1ODH;输出中间行的回车、换行INT21HMOVD1.,OHINT21HPOPCX;曳原中间行外层循环计数1.OOP1.1.;中间行不够n-2转1.1.输出下一行,否则依次执行MOVCXjBX;起先输出下边框的n个*,方法同上边框1
11、.4:MOVD1.,*MOVAH,2INT21H1.OOP1.4MOVD1.,ODHINT21HMOVD1.,OHINT21HMOVAH,4CH:结束INT2IHENDBEGIN例4.3.6题目:5阶方阵转置,编出将矩阵A转置的程序,转置后仍放在原处源程序如下:DATASEGMENTADW4050H,0003H,5678H,6400H,0009HDW0099H,0084H,9080H,4587H,0000HDW1045H,0000H,0001H,0008H,0007HDW1020H,4321H,5432H,6599H,1256HDW9000H,5608H,6578H,5000H,5432HDT
12、ENDSSTACKSEGMENTPARASTACKSTACK,STAPNDW20DUP(?)TOPEQU$-OFFSETSTPNSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,XMOVX,TOPMOVSP,XMOVCX,4MOVBX,01.OOP1.:PUSHCXMOVSI,2MOV)1,101.00P2:PUSHABX+SIPUSHBX+DIPOPBX+SIPOPBX+DIADDSI,2DDDI,OH1.OOP1.OOP2ADDBX,OCHPOPCX1.OOP
13、1.OOP1.MOVAH,4CHINT21HCODEENDSENDSTART例4.3.7编制程序把BX寄存器内的二进制数用十六进制的形式在屏幕上显示出来。例4.3.8在ADDR单元中存放着数丫的地址,编制程序把Y中1的个数存入COUNT单元中。例4.3.9在附加段中有一个首地址为1.IST的未经排序的字数组,在数组的第一个字中存放者该数组的长度,数组的首地址已存放的DI寄存器中。AX寄存器中存放着一个数。要求编程在数组中查找该数,假如找到该数则把它从数组中删除。例4.3.10编制程序将正数N插入一个已排序的字数组的正确位置。该数组的首地址和本地址分别为ARRAY_HEAD和ARRAY-END,其中全部数均为正数且已按递增的次序排列。例4.3.11逻辑尺。设有数组X和Y,X中有XI,X2,X10;Y中有Y1.,Y2,Y10,编制程序计算:Z1=X1+Y1,Z2=X2+Y2,Z3=X3-Y3,Z4=X4-Y4,Z5=X5-Y5,Z6=X6+Y6,Z7=X7-Y7,Z8=X8-Y8,Z9=X9+Y9,Z10=X10+Y10.结果存入Z数组中。例4.3.12有一个首地址为的N字数组,编制程序使该数组中的数根据从大到小的次序排列。例4.3.13在附加段中有一个字数组,其首地址已存放在DI寄存器中,在数组的第一个字中存放着该数组的长度。编制一个程序使该数组的数根据从小到大的次序排列整齐。