习题
1. 在MCS-51单片机中,寻址方式有几种?
答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。
2. 在MCS-51单片机中,哪些寻址方式访问的是片内RAM?
答:访问片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。
3. 在MCS-51单片机中,哪些寻址方式访问的是片外RAM?
答:只有寄存器间接寻址方式访问片外RAM寻址。
4. 在对片外RAM单元的寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?
答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR 作指针间接访问可访问整个64K字节。
5. 在MCS-51单片机中,相对寻址方式的目的地址如何计算?
答:目的地址=当前PC+rel=转移指令的地址+转移指令的字节数+rel
6. 在位处理中,位地址的表示方式有哪几种?
答:位地址的表示方式有4种:
(1) 直接位地址(00H~0FFH)。
例如,20H。
(2) 字节地址带位号。
例如,20H.3表示20H单元的3位。
(3) 特殊功能寄存器名带位号。
例如,P0.1表示P0口的1位。
(4) 位符号地址。
例如,TR0是定时/计数器T0的启动位。
7. 写出完成下列操作的指令。
(1) R2的内容送到R3中。
MOV A,R2
MOV R3,A
(2) 片内RAM的30H单元内容送到片内RAM的40H单元中。
MOV 40H,30H
(3) 片内RAM的30H单元内容送到片外RAM的30H单元中。
MOV A,30H
MOV R0,#30H
MOVX @R0,A
(4) 片内RAM的20H单元内容送到片外RAM的2000H单元中。
MOV A,20H
MOV DPTR,#2000H
MOVX @DPTR,A
(5) 片外RAM的1000H单元内容送到片内RAM的20H单元中。
MOV DPTR,#1000H
MOVX A,@DPTR
MOV 20H,A
(6) 片外RAM的1000H单元内容送到片外RAM的4000H单元中。
MOV DPTR,#1000H
MOVX A,@DPTR
MOV DPTR,#4000H
MOV @DPTR,A
(7) ROM的2000H单元内容送到片内RAM的20H单元中。
MOV A,#0
MOV DPTR,#2000H
MOVC A,@A+DPTR
MOV 20H,A
(8) ROM的2000H单元内容送到片外RAM的1000H单元中。
MOV A,#0
MOV DPTR,#2000H
MOVC A,@A+DPTR
MOV DPTR,#1000H
MOVX @DPTR,A
8. 区分下列指令有什么不同?
(1) MOV A,30H和MOV A,#30H
答:前者源操作数是直接寻址,后者源操作数立即寻址。
(2) MOV A,@R0和MOVX A,@R0
答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。
(3) MOV A,R0和MOV A,@R0
答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。
(4) MOVX A,@R0和MOVX A,@DPTR
答:前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。
(5) MOVX A,@DPTR和MOVC A,@A+DPTR
答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。
9. 设片内RAM的(10H)=20H,(20H)=30H,(30H)=40H,(P1)=50H。
分析下列指令执行后片内RAM的10H 、20H、30H单元以及P1、P2中的内容。
MOV R0,#20H ;R0=20H
MOV A,@R0 ;A=30H
MOV R1,A ;R1=30H
MOV A,@R1 ;A=40H
MOV @R0,P1 ;(20H)=50H
MOV P2,P1 ;P2=50H
MOV 10H,A ;(10H)=40H
MOV 20H,10H ;(20H)=40H
(10H)=40H; (20H)=40H; (30H)=40H; P1=P2=50H
10. 已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=33H,ROM(2FFEH)=66H,试分别写出以下各条指令执行后目标单元的内容。
(1) MOV A,@R1 ;A=70H
(2) MOVX @DPTR,A ;RAM(2FFCH)=02H
(3) MOVC A,@A+DPTR ;A=66H
(4) XCHD A,@R1 ;A=00H , RAM(7FH)=72H
11. 已知(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(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
12. 设(A)=83H,(R0)=20H,(20H)=34H,分析当执行完下面指令段后累加器A、R0、20H单元的内容。
ANL A,#17H ;A=03H
ORL 20H,A ;(20H)=37H
XRL A,@R0 ;A=34H
CPL A ;A=CBH
结果:A=CBH,(R0)=20H,(20H)=37H
13. 写出完成下列要求的指令。
(1) 累加器A的低4位清零,其余位不变。
ANL A,#11110000B
(2) 累加器A的高4位置“1”,其余位不变。
ORL A,#11110000B
(3) 累加器的高4位取反,其余位不变。
XRL A,#11110000B
(4) 累加器第0位、2位取反,其余位不变。
XRL A,#00000101B
14. 说明LJMP指令与AJMP指令有哪些区别?
答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。
AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。
15. 设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢?
答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。
16. 已知减数存放在R3,R4中(R3高位,R4低位),被减数存放在R5,R6中(R5高位,R6低位),编写双字节减法程序,结果存于片内RAM的32H,33H单元(32H高位,33H低位)。
程序:
MOV A,R4
CLR C
SUBB A,R6
MOV 33H,A
MOV A,R3
SUBB A,R5
MOV 32H,A
17. 用位处理指令实现P1.4=P1.0∨ (P1.1∧P1.2) ∨/P1.3的逻辑功能。
程序:
MOV C,P1.1
ANL C,P1.2
ORL C,P1.0
ORL C,/P1.3
MOV P1.4,C
18. 试编一段程序,将片内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 $
19. 编写程序将片外RAM的3000H单元开始存放的20个数传送到片内30H开始的单元。
程序:
MOV R0,#30H
MOV DPTR,#3000H
MOV R2,#20
LOOP: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,LOOP
SJMP $
20. 编写一段程序,统计片外RAM的1000H单元开始的100个单元中0的个数放R2中。
程序:
MOV DPTR,#1000H
MOV R3,#100
MOV R2,#00
LOOP: MOVX A,@DPTR
JNZ NEXT
INC R2
NEXT:INC DPTR
DJNZ R3,LOOP
SJMP $。