
单片机第五章作业标准答案.doc
4页5. 试编制一个子程序将字符串‘MCS-51 Microcomputer’装入外部RAM8000H开始的显示缓冲区ORG 0000HAJMP 0030H MIAN: MOV DPTR, #8000H MOV R1, #0 MOV R0, #20 LOOP: MOV A, R1 ADD A, #5 MOVC A, @A+PC MOVX @DPTR, A ;1B INC DPTR ;1B INC R1 ;1B DJNZ R0, LOOP ;3B TAB: 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为进位位。
LEN EQU 30ORG 0000HAJMP MAINORG 0030H MAIN: MOV SP. #60H MOV R2, #LEN ACALL ADD_NBYTE SJMP $ ADD_NBYTE: CLR CLOOP: MOV A, @R0 ADDC A, @R1 DA A MOV @R0, A INC R0 INC R1 DJNZ R2, LOOP RET END8. 试设计一个程序,其功能为判断(R2R3R4R5)中压缩BCD码十进制最高位是否为零,若最高位为0,且该十进制数不为0,则通过左移使最高位不为0ORG 0000HAJMP MAINORG 0030H MAIN: MOV A, R2 ANL A, #80H JNZ NEXT CLR C LOOP: MOV A, R5 RLC A MOV R5, A MOV A, R4 RLC A MOV R4, A MOV A, R3 RLC A MOV R3, A MOV A, R2 RLC A MOV R2, A ANL A, #80H JZ LOOP NEXT: SJMP $ END9. 试设计一个双字节无符号整数乘法子程序,其功能为将(R3R2)和(R5R4)相乘,积存放于30H~33H。
MULTB: MOV R7, #04 ;结果单元清0 MOV R0, #33HLOOP : MOV @R0,#00H DJNZ R7,LOOP MOV A, R2 ;取被乘数低位字节 MOV B, R4 ;取乘数低位字节R4 MUL AB ;R4×R2 ACALL RADD ;调用乘积相加子程序 MOV A, R2 ;取被乘数低位字节 R2 MOV B, R5 ;取乘数高位字节R5 MUL AB ;R5×R2 DEC R0 ;积字节指针减1 ACALL RADD ;调用乘积相加子程序 MOV A,R4 MOV B,R3 MUL AB ;R4×R3 DEC R0 DEC R0 ACALL RADD MOV A,R5 MOV B,R3 MUL AB ;R5×R3 DEC R0 ACALL RADD DEC R0 RETRADD:ADD A,@R0 ;累加子程序 MOV @R0,A MOV A,B INC R0 ADDC A,@R0 MOV @R0,A INC R0 MOV A,@R0 ADDC A,#00H ;加进位 MOV @R0,A RET11. 试设计一个子程序,其功能为将(R0)指出的内部RAM中6个单字节正整数按从小到大的次序重新排列。
S_2_L: MOV R4, #5 CLR F0 PUSH 00H ;R0入栈 POP 01H ;出栈赋给R1 INC R1LOOP0: MOV A, R4 MOV R5, ALOOP1: MOV A, @R0 MOV B, A MOV A, @R1 CJNE A, B, NEXT SJMP NOCHNEXT: JNC NOCH SETB F0 MOV @R0, A XCH A, B MOV @R1, ANOCH: INC R0 INC R1 DJNZ R5, LOOP1 JNB F0, HALT DJNZ R4, LOOP0HALT: RET12. 试设计一个子程序,其功能为查表指令:MOVC A,@A+PC,求累加器(A)的平方值,结果送A,入口时(A)<15SQRT: ADD A,#1MOVC A, @A+PC RETTAB: DB 0,1,4,9,…,225。












