5.试编制一个子程序将字符串‘MCS-51Microcomputer’装入外部RAM8000H开始的显示缓冲区。ORG0000HAJMP0030HMIAN:MOVDPTR,#8000HMOVR1,#0MOVR0,#20LOOP:MOVA,R1ADDA,#5MOVCA,@A+PCMOVX@DPTR,A;1BINCDPTR;1BINCR1;1BDJNZR0,LOOP;3BTAB:DB‘M’,’C’,’S’,’-‘,’5’,’1’,’‘,’M’,’i’,’c’,’r’,’o’DB‘c’,’o’,’m’,’p’,’u’,’t’,’e’,’r’END6.试设计一个n字节的无符号十进制数加法子程序,其功能为将(R0)和(R1)指出的内部RAM中两个n字节压缩BCD码无符号十进制数相加,结果存放于被加数单元中。子程序入口时,R0,R1分别指向被加数和加数的低位字节,字节数n存于R2,出口时R0指向和的最高位字节,CY为进位位。LENEQU30ORG0000HAJMPMAINORG0030HMAIN:MOVSP.#60HMOVR2,#LENACALLADD_NBYTESJMP$ADD_NBYTE:CLRCLOOP:MOVA,@R0ADDCA,@R1DAAMOV@R0,AINCR0INCR1DJNZR2,LOOPRETEND8.试设计一个程序,其功能为判断(R2R3R4R5)中压缩BCD码十进制最高位是否为零,若最高位为0,且该十进制数不为0,则通过左移使最高位不为0。ORG0000HAJMPMAINORG0030HMAIN:MOVA,R2ANLA,#80HJNZNEXTCLRCLOOP:MOVA,R5RLCAMOVR5,AMOVA,R4RLCAMOVR4,AMOVA,R3RLCAMOVR3,AMOVA,R2RLCAMOVR2,AANLA,#80HJZLOOPNEXT:SJMP$END9.试设计一个双字节无符号整数乘法子程序,其功能为将(R3R2)和(R5R4)相乘,积存放于30H~33H。MULTB:MOVR7,#04;结果单元清0MOVR0,#33HLOOP:MOV@R0,#00HDJNZR7,LOOPMOVA,R2;取被乘数低位字节MOVB,R4;取乘数低位字节R4MULAB;R4×R2ACALLRADD;调用乘积相加子程序MOVA,R2;取被乘数低位字节R2MOVB,R5;取乘数高位字节R5MULAB;R5×R2DECR0;积字节指针减1ACALLRADD;调用乘积相加子程序MOVA,R4MOVB,R3MULAB;R4×R3DECR0DECR0ACALLRADDMOVA,R5MOVB,R3MULAB;R5×R3DECR0ACALLRADDDECR0RETRADD:ADDA,@R0;累加子程序MOV@R0,AMOVA,BINCR0ADDCA,@R0MOV@R0,AINCR0MOVA,@R0ADDCA,#00H;加进位MOV@R0,ARET11.试设计一个子程序,其功能为将(R0)指出的内部RAM中6个单字节正整数按从小到大的次序重新排列。S_2_L:MOVR4,#5CLRF0PUSH00H;R0入栈POP01H;出栈赋给R1INCR1LOOP0:MOVA,R4MOVR5,ALOOP1:MOVA,@R0MOVB,AMOVA,@R1CJNEA,B,NEXTSJMPNOCHNEXT:JNCNOCHSETBF0MOV@R0,AXCHA,BMOV@R1,ANOCH:INCR0INCR1DJNZR5,LOOP1JNBF0,HALTDJNZR4,LOOP0HALT:RET12.试设计一个子程序,其功能为查表指令:MOVCA,@A+PC,求累加器(A)的平方值,结果送A,入口时(A)<15。SQRT:ADDA,#1MOVCA,@A+PCRETTAB:DB0,1,4,9,…,225