1、习题三 1.在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可以用哪几种寻址方式? 答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。 2.在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别? 答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPT
2、R作指针间接访问可访问整个64K字节。 3.在位处理中,位地址的表示方式有哪几种? 答:1.直接位地址(00H~0FFH)。例如:20H 2.字节地址带位号。例如:20H.3表示20H单元的3位。 3.特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。 4.位符号地址。例如:TR0是定时/计数器T0的启动位。 4.写出完成下列操作的指令。 (1)R0的内容送到R1中。 MOV A,R0 MOV R1,A (2)片内RAM的20H单元内容送到片内RAM的40H单元中。 MOV 40H,20H (3)片内RAM的30H单元内容送到片外RAM的50H单元中。
3、 MOV A,30H MOV R0,#50H MOVX @R0,A (4)片内RAM的50H单元内容送到片外RAM的3000H单元中。 MOV A,50H MOV DPTR,#3000H MOVX @DPTR,A (5)片外RAM的2000H单元内容送到片内RAM的20H单元中。 MOV DPTR,#2000H MOVX A,@DPTR MOV 20H,A (6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。 MOV DPTR,#1000H MOVX A,@DPTR MOV DPTR,#4000H
4、 MOV @DPTR,A (7)ROM的1000H单元内容送到片内RAM的50H单元中。 MOV A,#0 MOV DPTR,#1000H MOVC A,@A+DPTR MOV 50H,A (8)ROM的1000H单元内容送到片外RAM的1000H单元中。 MOV A,#0 MOV DPTR,#1000H MOVC A,@A+DPTR MOVX @DPTR,A 5.区分下列指令有什么不同? (1)MOV A,20H和MOV A,#20H 答:前者源操作数是直接寻址,后者源操作数立即寻址。 (2)MOV A,@R1和MOVX
5、 A,@R1 答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。 (3)MOV A,R1和MOV A,@R1 答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。 (4)MOVX A,@R1和MOVX A,@DPTR 答:前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。 (5)MOVX A,@DPTR和MOVC A,@A+DPTR 答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。 6.设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H
6、P1)=0CAH。分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。 MOV R0,#20H ;R0=20H MOV A,@R0 ;A=40H MOV R1,A ;R1=40H MOV A,@R1 ;A=10H MOV @R0,P1 ;(40H)=0CAH MOV P2,P1 ;P2=0CAH MOV 10H,A ;(10H)=10H MOV 20H,10H ;(20H)=10H 结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH 7.已知(A
7、02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。 (1)MOV A,@R1 结果:累加器A等于70H (2)MOVX @DPTR,A 结果:片外RAM(2FFCH)单元等于02H (3)MOVC A,@A+DPTR 结果: 累加器A等于64H (4)XCHD A,@R1 结果:累加器A等于00H,片内RAM(7FH)单元等于72H 8.已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0D
8、DH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。 (1)ADD A,@R1 ;累加器A等于55H,CY等于1 (2)SUBB A,#77H ;累加器A等于00H,CY等于0 (3)MUL AB ;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0 (4)DIV AB ;累加器A等于1EH,B寄存器等于00H,CY、OV等于0 (5)ANL 78H,#78H ;片内RAM(78H)单元等于58H (6)ORL A,#0FH ;累加器A等于7FH (7)XRL 80H,A ;片内RAM(80H)等于14H 9
9、.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。 ANL A,#17H ;A=03H ORL 17H,A ;(17H)=37H XRL A,@R0 ;A=34H CPL A ;A=CBH 结果:A=CBH,(R0)=17H,(17H)=37H 10.写出完成下列要求的指令。 (1)累加器A的低2位清零,其余位不变。 ANL A,#11111100B (2)累加器A的高2位置“1”,其余位不变。 ORL A,#11000000B (3)累加器的高4位取反,其余位不变。 XRL
10、 A,#11110000B (4)累加器第0位、2位、4位、6位取反,其余位不变。 XRL A,#01010101B 11.说明LJMP指令与AJMP指令的区别? 答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。 AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。 12.设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为
11、10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢? 答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。 13.用位处理指令实现P1.4=P1.0Ù(P1.1ÚP1.2)Ú/P1.3的逻辑功能。 程序: MOV C,P1.1 ORL C,P1.2 ANL C,P1.0 ORL C,/P1.3 MOV P1.4,C 14.下列程序段汇编后,从1000H单元开始的单元内容是什么? ORG 1000H TAB: DB 12H,34H DS 3 DW 5567H,87H 答:(1000H)=1
12、2H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H 15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。 程序: MOV R0,#20H MOV R2,#03H LOOP:MOV A,@R0 MOVX @R0,A INC R0 DJNZ R2,LOOP SJMP $ 16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位
13、置,并将源位置清零。 程序: MOV R0,#20H MOV DPTR,#2000H MOV R2,#31H LOOP: MOVX A,@DPTR MOV @R0,A MOV A,#00 MOVX @DPTR,A INC DPTR INC R0 DJNZ R2,LOOP SJMP $ 17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。 程序: MOV DPTR,#1000H MOV R2,#100 MOV R7,#00 MOV R6,#00 LOOP: MOVX A,@DPTR ADD A,R6
14、 MOV R6,A MOV A,R7 ADDC A,#0 MOV R7,A INC DPTR DJNZ R2,LOOP SJMP $ 18.编程实现R4R3´R2,结果放于R7R6R5中。 程序: ORG 0100H MUL1:MOV A,R2 MOV B,R3 MUL AB ;R2´R3,结果的低字节直接存入积的R5 MOV R5,A ;结果的高字节存入R6中暂存起来 MOV R6,B MUL2:MOV A,R2 MOV B,R4 MUL AB ;R2´R4,结果的低字节与R6相加后,再
15、存入R6中 ADD A,R6 MOV R6,A MOV A,B ;结果的高字节加上进位位后存入R7中 ADDC A,#00 MOV R7,A SJMP $ 19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。 程序: MOV C,20H.0 MOV A.0,C MOV C,20H.1 MOV A.1,C MOV C,21H.2 MOV A.2,C MOV C,21H.3 MOV A.3,C MOV C,22H.4 M
16、OV A.4,C MOV C,22H.5 MOV A.5,C MOV C,23H.6 MOV A.6,C MOV C,23H.7 MOV A.7,C MOV R2,A 20.用查表的方法实现一位十六进制数转换成ASCII。 程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中) C16STASC:MOV DPTR,#TAB MOV A,R2 MOVC A,@A+DPTR MOV R2,A RET TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,391H,41H,42H,43H,44H,45H,46H 21.编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。 程序: MOV DPTR,#2000H MOV R3,#100 MOV R2,#00 LOOP: MOVX A,@DPTR JNZ NEXT INC R2 NEXT:INC DPTR DJNZ R3,LOOP SJMP $ 3
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818