XCH A, @R0 ;交换 DEC R0
XCH A, @R0 INC R0
Next:
DJNZ R7, Goon JB Change, Sort MOV R0, #Array MOV R7, #Size
MOV DPTR,#2000H L1: MOV A,@R0 MOVX @DPTR,A INC RO INC DPTR DJNZ R7,L1
LJMP $
4-15 试编写一查表程序,从首地址为2000H,长度为16的数据快中找出ASCII码D,将其地址送到20A0H~20A1H单元中。
ORG 0000H SJMP MIAN
ORG 0030H
MAIN: MOV DPTR,#4000H MOV R0,#16-1 L1: MOV A,R0 MOVC A,@A+DPTR CJNE A,#43H,L2 SJMP L3 L2: DJNZ R0,L1 SJMP LAST L3:
ADD A,DPL
MOV 30H,A ;结果暂存在31h,30h MOV A,#00H
ADDC A,DPH
MOV 31H,A
MOV DPTR,#20A0H ;结果存入到片外20A1h,20A0h MOV A,30H MOVX @DPTR,A INC DPTR MOV A,31H MOVX @DPTR,A LAST: SJMP $ ORG 2000H
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H
4-16 试编写表程序,将存放在内部RAM起始地址为30h的20个十六进制数分别转换为相应的ASCII码,结果存入内部RAM起始地址为50h的连续单元中。
ORG 0000H SJMP MAIN
ORG 0030H
MAIN: MOV R0,#30H MOV R1,#50H MOV R2,#20 LOOP:
MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR MOV @R1,A INC R1 INC R0
DJNZ R2,LOOP
SJMP $
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H 程序,将存放在内部RAM起始地址为40H的N个ASCII码分别转化为相应的十六进制数,结果存入内部RAM起始地址为60H的连续单元中。
解答: N EQU 20H
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: MOV R0,#40H MOV R1,#60H MOV R2,#N
BCD1: MOV A,@R0 ACALL HBCD MOV @R1,50H INC R0 INC R1 DJNZ R2,BCD1
SJMP $
HBCD: CJNE A,#30H,L1 L1: JC LAST CJNE A,#40H,L2 L2: JC L3
CJNE A,#46H,L4 L4: JC L5 SJMP NONUM L5: CLR C SUBB A,#36H MOV 50H,A SJMP LAST L3: CLR C SUBB A,#30H MOV 50H,A
SJMP LAST
NONUM: MOV 50H,#0FFH LAST: RET
4-18 设在外部RAM 2000h~2014h单元中,存放有5个压缩BCD码,试编写程序将它们转换成ASCII码,存放在以2005H单元为首地址的存储区中。
ORG 0000H SJMP MAIN
ORG 0030H
MAIN: MOV R0,#40H ;压缩BCD码变成非压缩BCD码
MOV R1,#5
MOV DPTR,#2000H
L1: MOVX A,@DPTR MOV 30H,A ANL A,#0FH MOV @R0,A
INC R0 MOV A,30H SWAP A ANL A,#0FH MOV @R0,A INC R0 INC DPTR DJNZ R1,L1
MOV R0,#40H ;40H存储区的非压缩BCD码转换成ASCII码,存放在以40H单元为首地
址的存储区中。
MOV R1,#0AH MOV DPTR,#TAB L2: MOV A,@R0 MOVC A,@A+DPTR MOV @R0 INC R0 DJNZ R1,L2
MOV DPTR,#2005H ;存放在2005H单元为首地址的存储区中。
MOV R1,#0AH MOV R0,#40H L3: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,L3 SJMP $
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H