第四章、习题
1.设计一段单片机子程序,实现内存中数据块的传递。
*子程序功能:将内部RAM DA TA1开始的一个数据块传送到区域DATA2,数据块长度data3 ORG 1000H
SUB1:MOV R0,#DATA1
MOV R1,#DA TA2
MOV R3,#data3
ACALL LOOP
LOOP:MOV A, @R0
MOV @R1,A
INC R0
INC R1
DJNZ R3,LOOP
DONE:RET
2、编程实现在外部RAM中把200CH开始的30H个字节数据传送到8100H开始的单元中去。
答:ORG 2000H
MOV R0, #30H
MOV R1, #0CH
MOV R2, #20H
MOV R3, #00H
MOV R4, #81H
LOOP: MOV DPL,R1
MOV DPH,R2
MOVX A, @DPTR
INC DPTR
MOV R1, DPL
MOV R2, DPH
MOV DPL, R3
MOV DPH, R4
MOVX @DPTR, A
INC DPTR
MOV R3, DPL
MOV R4, DPH
DJNZ R0, LOOP
END
3、已知在内部RAM中有以array为首地址的数据区,依次存放单字节数
组长度及数组内容,求这组数据的和,并将和接着该数据区存放。假定数组之和小于225,请编写程序。
**设数组长度为dam,它存放在array开始的第一个字节。R3记录数组长度,R0记录数组的间接地址(包含数组长度所占用单元),R1记录存放地址
ORG 1000H
MOV R0,#array
MOV A,@R0 /数组长度送R3
MOV R3,A
INC R0 /求存放数组的新地址
ADD A,R0 /
MOV R1,A /存放数组的地址送R1
CLR C
CLR A
LOOP:ADDC A,@R0
MOV @R1,A
DJNZ R3 LOOP
END
5、试设计一个能实现多字节的加法和减法的子程序,并编写主程序调用该子程序,实现将存放在分别以30H和40H 开始的连续16个字节数据之和,和值存放在以50H开始的地址中(假设和值没有溢出)。
答:ORG 2000H
Main: MOV R0, #30H
MOV R1, #40H
MOV R2, #10H
MOV R3, #50H
CLR C
LCALL loop
Sjmp ﹩
END
LOOP: MOV A, @R0
ADDC A, @R1;S UBB A,@R1
PUSH R3
PUSH R1
POP R3
POP R1
MOV @R1, A
XCH A,R3
XCH A,R1
XCH A,R3
INC R0
INC R1
INC R3
DJNZ R2, LOOP
JC OTHER;最高位有进(借)位,转去处理。
RET
减法同。