解:
指令 源操作数的寻址方式 执行指令后的结果
MOV A,40H 直接寻址 (A)=50H MOV R0,A 寄存器寻址 (R0)=50H MOV P1,#80H 立即寻址 (P1)=80H MOV @R0,20H 寄存器间接寻址 (50H)=30H MOV DPTR,#2000H 立即寻址 (DPTR)=2000H MOV 40H,30H 直接寻址 (40H)=40H MOV R0,30H 直接寻址 (R0)=40H MOV D0H,R0 直接寻址 (D0H)=40H MOV 10H,#10H 立即寻址 (10H)=10H MOV A,@R0 寄存器间接寻址 MOV P2,P1 直接寻址 17.完成以下的数据传送过程
(1)R1的内容传送到R0。
(2)片外RAM 20H单元的内容送R0。
(3)片外 RAM 20H单元的内容送片内RAM 20H单元。 (4)片外RAM 1000H单元的内容送片内 RAM 20H单元。 (5)ROM 2000H单元的内容送R0。
(6)ROM 2000H单元的内容送片内RAM 20H单元。 (7)ROM 2000H单元的内容送片外RAM 20H单元。 解:
(1)R1的内容传送到R0 ; MOV A, R1 MOV R0, A
(2)片外RAM 20H单元内容送R0 ; MOV R1, #20H MOVX A, @R1 MOV R0, A
(3)片外 RAM 20H单元的内容送片内RAM 20H单元; MOV R0, #20H MOVX A, @R0 MOV 20H, A
(4)片外RAM 1000H单元的内容送片内 RAM 20H 单元; MOV DPTR, #1000H MOVX A, @DPTR MOV 20H, A (5)ROM 2000H单元的内容送R0单元; CLR A
MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0, A
(6)ROM 2000H 单元的内容送片内RAM 20H单元; CLR A
MOV DPTR, #2000H MOVC A, @A+DPTR
MOV 20H, A
(7)ROM 2000H单元的内容送片外RAM 20H单元。 CLR A
MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0, #20H MOVX @R0, A
(A)=50H (P2)=80H
9
18.设有两个4位BCD码,分别存放在片内RAM的23H, 22H单元和33H, 32H单元中,求它们的和,并送入43H, 42H单元中去。(以上均为低位在低字节,高位在高字节)。 解: ORG 0000H
LJMP START ORG 0030H START: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $
END
19.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。并将原片内RAM数据块区域全部清0。 解: ORG 0000H MOVX @DPTR,A
LJMP MAIN CLR A ORG 0030H MOV @R1,A
INC R1 MAIN: MOV SP, #60H
INC DPTR MOV R7,#21H
DJNZ R7,LOOP MOV R1,#40H
SJMP $ MOV DPTR,#3000H
END
LOOP: MOV A,@R1
20.编程计算片内RAM区30H~37H 的8个单元中数的算术平均值,结果存放在3AH单元中。
解: ORG 0000H DJNZ R3,LP2
LJMP MAIN MOV R3,#03H ORG 0030H CLR C MAIN: MOV R0,#30H LP3:MOV A,R1 MOV R1,#00H RRC A MOV R2,#00H MOV R1,A MOV R3,#08H MOV A,R2
RRC A LP2: MOV A,@R0
MOV R2,A ADD A,R2
DJNZ R3,LP3 MOV R2,A
MOV 3AH,R2 JNC LP1
INC R1 SJMP $
END LP1: INC R0
21.编写计算下式的程序,设乘积的结果均小于255。A, B值分别存放在片外RAM的2001H和2002H单元中,结果存于2000H单元中。 (A+B)×(A+B)+10 若(A+B)×(A+B)<10
Y= (A+B)×(A+B) 若(A+B)×(A+B)=10
(A+B)×(A+B)-10 若(A+B)×(A+B)>10
解:
ORG 0000H MOV DPTR,#2002H
LJMP START MOVX A,@DPTR ORG 0030H ADD A,30H START: MOV DPTR,#2001H MOV B,A MOVX A,@DPTR MUL AB MOV 30H,A MOV R1,A
10
CJNE A,#10,NET1 MOVX @DPTR,A
SJMP NET3 MOV DPTR,#2000H
NET2: MOV A,R1 MOVX @DPTR,A
ADD A,#10 SJMP NET3
NET1: JNC NET2 MOV DPTR,#2000H CLR C MOVX @DPTR,A MOV A,R1 NET3: SJMP $ SUBB A,#10 END MOV DPTR,#2000H
22.设有两个长度均为15的数组,分别存放在片外RAM以2000H和2100H开始的存储区中,试编程求其对应项之和,结果存放在以2200H为首地址的存储区中。
INC DPTR 解: ORG 0000H
INC R1 LJMP MAIN
DJNZ R2,LOOP ORG 0030h
MOV R1,#30H MAIN: MOV DPTR,#2000H
MOV DPTR,#2100H MOV A,#OFFH
MOV R2,#15 MOVX @DPTR,A
MOV R0,#40H MOV DPTR,#2100H
LOOP1: MOV A,#34H
MOVX A,@DPTR MOVX @DPTR,A
CLR C MOV DPTR,#2008H
ADDC A,@R1 MOV A,#33H
MOV @R0,A MOVX @DPTR,A
INC DPTR MOV DPTR,#2108H
INC R1 MOV A,#44H
INC R0 MOVX @DPTR,A
DJNZ R2,LOOP1 MOV DPTR,#200EH
MOV DPTR,#2200H MOV A,#0EEH
MOV R2,#15 MOVX @DPTR,A
MOV R0,#40H MOV DPTR,#210EH
LOOP2: MOV A,@R0 MOV A,#32H
MOVX @DPTR,A MOVX @DPTR,A
INC R0 MOV DPTR,#2000H
INC DPTR MOV R1,#30H
DJNZ R2,LOOP2 MOV R2,#15
SJMP $ LOOP: MOVX A,@DPTR
END MOV @R1,A
23.设有100个有符号数,连续存放在片外RAM以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数。
SJMP NET3 解: ORG 0000H
NET1: JB ACC.7 NET2 LJMP MAIN
ORG 0030H INC R4
SJMP NET3 MAIN: MOV R2,#100
NET2: INC R5 MOV R3,#00H
NET3: INC DPTR MOV R4,#00H
DJNZ R2,LOOP MOV R5,#00H
SJMP $ MOV DPTR,#2000H
END LOOP: MOVX A,@DPTR
CJNE A,#00H,NET1 INC R3
24.试编一查表程序,从外部RAM首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。
ORG 0030H 解: ORG 0000H
MAIN: MOV SP, #60H LJMP MAIN
11
MOV DPTR,#2000H INC DPTR
MOV R7,#9FH MOV A, R3 LP0: MOVX A,@DPTR MOVX @DPTR,A CJNE A, #41H, LP1 SJMP LP2 MOV R2,DPL LP1: INC DPTR MOV R3,DPH DJNZ R7, LP0
MOV DPTR,#20A0H LP2: RET
MOV A, R2
END
MOVX @DPTR,A
25.编程把片外RAM中以2040H为首地址的连续50个单元中的无符号数按降序排列,存放到以3000H为首地址的存储区中。 解: ORG 0000H CJNE A,21H,LOOP
LJMP MAIN LOOP: JNC LOOP1 ORG 0100H MOV A,20H MAIN: MOV DPTR,#2040H MOVX @DPTR,A MOV R2,#50 DEC DPTR CLR 7FH MOV A,21H DEC R2 MOVX @DPTR,A LS: MOVX A,@DPTR INC DPTR MOV 20H,A SETB 7FH INC DPTR LOOP1: DJNZ R2,LS MOVX A,@DPTR JB 7FH,MAIN MOV 21H,A SJMP $ MOV A,20H END
26.在片外RAM以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转换成BCD码,并以压缩BCD码(即一个单元存放两位BCD码)的形式存放在以3000H开始的单元中。 解: ORG 0000H MOV A,41H
LJMP MAIN XCHD A,@R1 ORG 0030H MOV @R1,A MAIN: MOV R2,#0AH INC R1 MOV R1,#30H INC DPTR MOV DPTR,#2000H DJNZ R2,TT TT: MOVX A,@DPTR MOV DPTR,#3000H CLR C MOV R1,#30H SUBB A,#30H MOV R2,#0AH SWAP A TT1: MOV A,@R1 MOV 41H,A MOVX @DPTR,A INC DPTR INC R1 MOVX A,@DPTR INC DPTR CLR C DJNZ R2,TT1 SUBB A,#30H SJMP $ MOV @R1,A END
27.编程实现将片外RAM中2400H~2450H单元中的数传送到2500H~2550H单元中。
MOVX @DPTR,A 解: ORG 0000H
MOV 30H,#24H LJMP MAIN
MOV 31H,#00H ORG 0030H
MOV 32H,#25H MAIN:
MOV 33H,#00H MOV DPTR,#2400H
MOV R2,#51H MOV A,#07H
LOOP: MOVX @DPTR,A
MOV DPH,30H MOV DPTR,@2450H
MOV DPL,31H MOV A,#06H
12