单片微机原理与接口技术答案(宋跃版)

INC R0 ;字节数加1

CJNE R0,#00H,LOOP ;连续清256个字节 LOOP1: SJMP LOOP1 END

7、录入并调试一个排序子程序,其功能为用冒泡法将内部RAM中从50H开始的十个单字节无符号正整数,按从小到大的次序重新排列。 程序如下:

用冒泡法进行数据排序 ORG 0000H MOV R3,#50H LOOP0: MOV A,R3

MOV R0,A ;指针送R0 MOV R7,#0AH ;长度送R7

CLR 00H ;标志位为0 MOV A,@R0 LOOP1: INC R0 MOV R2,A CLR C

MOV 22H,@R0

CJNE A,22H,LOOP2 ;相等吗? SETB C

LOOP2: MOV A,R2

JC LOOP3 ;小于或等于不交换 SETB 00H XCH A,@R0 DEC R0 XCH A,@R0

INC R0 ;大于交换位置 LOOP3:MOV A,@R0 DJNZ R7,LOOP1

第 页 共 46 页

16

JB 00H,LOOP0 LOOP: SJMP LOOP END

;一次循环中有交换继续 ;无交换退出

8、设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放在24H、25H中,试编写出16位数相加的程序。 答: ORG 1000H MOV R1,#21H

MOV R2,#23H

MOV R3,#25H CLR C

LP;MOV A,@R2

ADDC A,@R1 MOV @R3,A DEC R1 DEC R2 DEC R3

DJNE R1,#1FH,LP SJMP $

第 页 共 46 页

17

9、编写一段程序,把外部RAM中1000H~1030H单元的内容传送到内部RAM的30H~60H单元中。

答: ORG 0030H MOV R1,#49 MOV R0,#30H MOV DPTR,#1000H LOOP: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0

DJNZ R1,LOOP SJMP $ END

10、编写程序,实现双字节无符号数加法运算,要求(R1R0)+(R7R6)→(61H60H)。 答:

MOV A,R0 ADD A,R6 MOV 60H,A MOV A,R1 ADDC A,R7 MOV 61H,A SJMP $

11、用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指向另一个加

数,字节存放到R2中作计数初值。 答:

主程序:

JAFA: MOV R0,#20H ;指向加数最低字节 MOV R1,#29H ;指向另一加数最低字节 MOV R2,#04H ;字节数作计数值 ACALL JASUB ;调用加法子程序 AJMP $ RTE

多字节加法子程序:

第 页 共 46 页 18

JASUB: CLR C

JASUB1: MOV A,@R0 ;取出加数的一个字节(4B无符号数加数) ADDC A,@R1 ;加上另一数的一个字节 MOV @R0,A ;保存和数 INC R0 ;指向加数的高位 INC R1 ;指向另一加数的高位 DJNZ R2,JASUB1 ;全部加完了吗? RET

12、在内部RAM的21H单元开始存有一组单字节不带符号数,数据长度为30H,要求找出最大数存入BIG单元。 答:

START: MOV R7,30H DEC R7

MOV R0,#21H

MOV A,@R0

LOOP:INC R0 CLR C

SUBB A,@R0 JNC NEXT MOV A,@R0 NEXT:DJNZ R7,LOOP MOV BIG, A SJMP $ END

13、求双字节补码程序

设双字节数放在内部RAM的30H和31H单元(高字节在低地址),将其取补后存入40H(存放高字节)和41H(存放低字节)单元 答:

START:MOV A,31H CPL A

ADD A,#01H MOV 41H,A MOV A,30H CPL A JNC DONE ADD A,#01H

DONE:MOV 30H,A SJMP $

14、编程统计累加器A中“1”的个数。

第 页 共 46 页

19

答:

MOV R1,#0 PUSH ACC LOOP1:JZ DONE CLR C RLC A JNC LOOP1 INC R1 SJMP LOOP1 DONE:POP ACC SJMP $ END

15、编程序实现1+2+3+??+100=? 答:

汇编代码如下:

H_Byte EQU R4 ;保存结果,高8位L_Byte EQU R5 ;保存结果,低8位Max_Adder EQU 100 ;最大的加数

ORG 0000H LJMP MAIN ORG 0030H

MAIN:

MOV R2,#1 ;加数 MOV R4,#0 MOV R5,#0

START:

MOV A,#Max_Adder CLR CY SUBB A,R2 JC RESULT MOV A,R2 ADD A,L_Byte

MOV L_Byte,A ;保存低位 MOV A,H_Byte ADDC A,#0

MOV H_Byte,A ;保存高位 INC R2 JMP START

RESULT:

SJMP $ ;只用于调试 END

C语言代码如下:

第 页 共 46 页

20

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4