1、1找到后第一时间上传,献给各位电子班的同学习题三1在 MCS-51 单片机中,寻址方式有几种?其中对片内 RAM 可以用哪几种寻址方式?对片外 RAM 可以用哪几种寻址方式?答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内 RAM 寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外 RAM 寻址有:寄存器间接寻址方式。2在对片外 RAM 单元寻址中,用 Ri 间接寻址与用 DPTR 间接寻址有什么区别?答:片外数据存储器寻址中,
2、用 Ri 间接寻址只能访问低端的 256 字节单元,而用DPTR 作指针间接访问可访问整个 64K 字节。3在位处理中,位地址的表示方式有哪几种?答:1直接位地址(00H0FFH)。例如:20H2字节地址带位号。例如:20H.3 表示 20H 单元的 3 位。3特殊功能寄存器名带位号。例如:P0.1 表示 P0 口的 1 位。4位符号地址。例如:TR0 是定时/ 计数器 T0 的启动位。4写出完成下列操作的指令。(1)R0 的内容送到 R1 中。MOV A,R0MOV R1,A(2)片内 RAM 的 20H 单元内容送到片内 RAM 的 40H 单元中。MOV 40H,20H(3)片内 RAM
3、 的 30H 单元内容送到片外 RAM 的 50H 单元中。MOV A,30HMOV R0,#50HMOVX R0,A(4)片内 RAM 的 50H 单元内容送到片外 RAM 的 3000H 单元中。MOV A,50HMOV DPTR,#3000HMOVX DPTR,A(5)片外 RAM 的 2000H 单元内容送到片内 RAM 的 20H 单元中。MOV DPTR,#2000HMOVX A,DPTRMOV 20H,A2(6)片外 RAM 的 1000H 单元内容送到片外 RAM 的 4000H 单元中。MOV DPTR,#1000HMOVX A,DPTRMOV DPTR,#4000HMOV
4、DPTR,A(7)ROM 的 1000H 单元内容送到片内 RAM 的 50H 单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOV 50H,A(8)ROM 的 1000H 单元内容送到片外 RAM 的 1000H 单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOVX DPTR,A5区分下列指令有什么不同?(1)MOV A,20H 和 MOV A,#20H答:前者源操作数是直接寻址,后者源操作数立即寻址。(2)MOV A,R1 和 MOVX A,R1答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低 25
5、6字节。(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 ,(P1)=0CAH。分析下列指令执行后片内 RAM 的 20H、40H 、10H 单元以及 P1、P2 中的内容。MOV
6、 R0,#20H ;R0=20HMOV A,R0 ;A=40HMOV R1,A ;R1=40HMOV A,R1 ;A=10HMOV R0,P1 ;(40H )=0CAHMOV P2,P1 ;P2=0CAHMOV 10H,A ;(10H )=10HMOV 20H,10H ;(20H )=10H结果:(20H)=10H、(10H)=10H、(40H )=0CAH、 P2=0CAH 和 P1=0CAH37已知(A)=02H,(R1)=7FH ,(DPTR)=2FFCH,片内 RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元
7、的内容。(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)单元等于72H8已知:(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
8、,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)等于 14H9设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H 单元的内容。ANL A,#17H ;A=03HORL 17H,A ;(17H )=37HXRL
9、A,R0 ;A=34HCPL A ;A=CBH结果:A=CBH,(R0)=17H,(17H )=37H10写出完成下列要求的指令。(1)累加器 A 的低 2 位清零,其余位不变。ANL A,#11111100B(2)累加器 A 的高 2 位置“ 1”,其余位不变。ORL A,#11000000B(3)累加器的高 4 位取反,其余位不变。XRL A,#11110000B(4)累加器第 0 位、2 位、4 位、6 位取反,其余位不变。XRL A,#01010101B11说明 LJMP 指令与 AJMP 指令的区别?答:LJMP 指令后面提供的是 16 位目标地址,所以可以转移到 64KB 程序存储
10、器的任意位置,缺点是:执行时间长,字节数多。AJMP 指令后带的是 11 位直接地址,执行时,先将程序指针 PC 的值加 2(该指4令长度为 2 字节),然后把指令中的 11 位地址 addr11 送给程序指针 PC 的低 11 位,而程序指针的高 5 位不变,只能在当前 2K 范围内转移。12设当前指令 CJNE A,#12H,10H 的地址是 0FFEH,若累加器 A 的值为 10H,则该指令执行后的 PC 值为多少?若累加器 A 的值为 12H 呢?答:指令执行后的 PC 值为 1011H,若累加器 A 的值为 12H,则指令执行后的 PC 值为 1001H。13用位处理指令实现 P1.
11、4=P1.0(P1.1P1.2 ) /P1.3 的逻辑功能。程序:MOV C,P1.1ORL C,P1.2ANL C,P1.0ORL C,/P1.3MOV P1.4,C14下列程序段汇编后,从 1000H 单元开始的单元内容是什么?ORG 1000HTAB: DB 12H,34HDS 3DW 5567H, 87H答:(1000H)=12H,(1001H )=34H,(1002H ) =00H,(1003H)=00,(1004H )=00,(1005H )=67H ,(1006H )=55H,(1007H )=87H,(1008H)=00H15试编一段程序,将片内 RAM 的 20H、21H 、
12、22H 单元的内容依次存入片外 RAM 的20H、21H、22H 中。程序:MOV R0,#20HMOV R2,#03HLOOP:MOV A,R0MOVX R0,AINC R0DJNZ R2,LOOPSJMP $16编程实现将片外 RAM 的 2000H2030H 单元的内容,全部搬到片内 RAM 的 20H 单元开始位置,并将源位置清零。程序:MOV R0,#20HMOV DPTR,#2000HMOV R2,#31HLOOP: MOVX A,DPTRMOV R0,A5MOV A,#00MOVX DPTR,AINC DPTRINC R0DJNZ R2,LOOPSJMP $17编程将片外 RAM
13、 的 1000H 单元开始的 100 个字节数据相加,结果放于 R7R6 中。程序:MOV DPTR,#1000HMOV R2,#100MOV R7,#00MOV R6,#00LOOP: MOVX A,DPTRADD A,R6MOV R6,AMOV A,R7ADDC A,#0MOV R7,AINC DPTRDJNZ R2,LOOPSJMP $18编程实现 R4R3R2,结果放于 R7R6R5 中。程序:ORG 0100HMUL1:MOV A,R2MOV B,R3MUL AB ;R2R3,结果的低字节直接存入积的 R5MOV R5,A ;结果的高字节存入 R6 中暂存起来MOV R6,BMUL2
14、:MOV A,R2MOV B,R4MUL AB ;R2R4,结果的低字节与 R6 相加后,再存入 R6 中ADD A,R6MOV R6,AMOV A,B ;结果的高字节加上进位位后存入 R7 中ADDC A,#00MOV R7,ASJMP $19编程实现把片内 RAM 的 20H 单元的 0 位、1 位,21H 单元的 2 位、3 位,22H 单元6的 4 位、5 位,23H 单元的 6 位、7 位,按原位置关系拼装在一起放于 R2 中。程序:MOV C,20H.0MOV A.0,CMOV C,20H.1MOV A.1,CMOV C,21H.2MOV A.2,CMOV C,21H.3MOV A
15、.3,CMOV C,22H.4MOV A.4,CMOV C,22H.5MOV A.5,CMOV C,23H.6MOV A.6,CMOV C,23H.7MOV A.7,CMOV R2,A20用查表的方法实现一位十六进制数转换成 ASCII。程序:(设一位十六进制数放在 R2 中,轮换的 ASCII 也放于 R2 中)C16STASC:MOV DPTR,#TABMOV A,R2MOVC A,A+DPTRMOV R2,ARETTAB:DB 30H,31H,32H ,33H,34H,35H ,36H,37HDB 38H,391H,41H,42H,43H,44H ,45H ,46H21编程统计从片外 RAM2000H 开始的 100 个单元中“0”的个数放于 R2 中。程序:MOV DPTR,#2000HMOV R3,#100MOV R2,#00LOOP: MOVX A,DPTRJNZ NEXTINC R2NEXT:INC DPTRDJNZ R3,LOOPSJMP $7