单片机及微机原理课后习题答案 下载本文

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

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

第 17 页 共 47 页

LP;MOV A,@R2

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

DJNE R1,#1FH,LP SJMP $

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 $

第 18 页 共 47 页

RTE

多字节加法子程序:

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

第 19 页 共 47 页

DONE:MOV 30H,A SJMP $

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

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:

第 20 页 共 47 页