单片机指令系统复习.docx
《单片机指令系统复习.docx》由会员分享,可在线阅读,更多相关《单片机指令系统复习.docx(28页珍藏版)》请在冰豆网上搜索。
![单片机指令系统复习.docx](https://file1.bdocx.com/fileroot1/2023-6/22/aa36af59-58c0-4e01-aef8-69cc6f33b80c/aa36af59-58c0-4e01-aef8-69cc6f33b80c1.gif)
单片机指令系统复习
一.填空题
1.指出以下程序顺序执行后每一条指令的结果。
填写在划线部分。
(1)MOVA,#25H;(A)=25H
(2)MOV40H,#1AH;(40H)=1AH
(3)MOVR2,#33H;(R2)=33H
(4)CLRC;(C)=0
(5)ADDA,R2 ;(A)=58H
(6)ADDCA,40H ;(A)=72H
(7)MOVRO,#40H ;(R0)=40H
(8)ADDCA,@RO ;(A)=8CH
2.在划线部分写出下列程序每一条指令执行后其目的操作数的结果。
(1)MOVA,#OFOH;0F0H
(2)CPLA;0FH
(3)ANL30H,#00H;00H
(4)ORL30H,#BDH;0BDH
(5)XRL30H,A;0B2H
3.若(A)=7AH,分别执行下列指令后,A的值是多少?
填在划线部分。
标志位CY和OV的值各是多少
考虑上下指令之间的联系。
(1)ANLA,#0FFH;7AH(4)ORLA,#00H;7AH
(2)ORLA,#0FFH;0FFH(5)XRLA,#0FFH;85H
(3)ANLA,#00H;00H(6)XRLA,00H;7AH
二.简答题
1.8051单片机的指令系统有何特点?
解:
8051的指令系统由111条指令组成。
如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。
8051的指令系统具有以下特点:
(1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。
这样可以大大提高传送速度和缓解累加器A的瓶颈效应。
(2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。
这为编成翻译算法提供了方便。
(3)在算术运算指令中设有乘法和除法指令
(4)指令系统中一些对I/O口进行操作的指令具有“读——修改——写”的功能。
这一功能指:
在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2度入内部,进行修改、改变,然后重新写到锁存器中去。
这种类型指令包含所有的逻辑操作和位操作指令。
(5)8051单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。
布尔操作类指令有17条,包括布尔传送指令、布尔状态控制指令、布尔逻辑操作指令、布尔条件转移指令。
2.8051单片机指令系统按功能可分为几类?
具有几种寻址方式?
它们的寻址范围如何?
解:
MCS-51单片机指令系统按功能可分为5类:
(1)数据传送指令2)算术运算指令3)逻辑运算和移位指令4)控制转移指令5)位操作指令
MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表:
寻址方式
使用的变量
寻址范围
立即寻址
程序存储器
直接寻址
内部RAM低128个字节;
特殊功能寄存器SFR
寄存器寻址
R0~R7;A、B、DPTR、C
寄存器间接寻址
@R0、@R1、SP
内部RAM、堆栈指针SP
@R0、@R1、@DPTR
外部RAM
变址寻址
@A+PC、@A+DPTR
程序存储器
相对寻址
PC+偏移量
程序存储器
位寻址
内部RAM低128B位寻址区
可位寻址的特殊功能寄存器位
3.访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式?
解:
访问特殊功能寄存器,应采用直接寻址、位寻址方式。
访问外部数据存储器,应采用寄存器间接寻址方式。
在0~255B范围内,可用寄存器R0、R1间接寻址:
MOVXA,@R0或MOVXA,@R1MOVX@R0,A或MOVX@R1,A
在0~64KB范围内,可用16位寄存器DPTR间接寻址
MOVXA,@DPTRMOVX@DPTR,A
4.“DAA”指令的作用是什么?
怎样使用?
解:
这条指令是在进行BCD码加法运算时,跟在“ADD”和“ADDC”指令之后,用来对BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。
在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU硬件中的十进制修正电路自动进行的。
用户不必考虑何时该加“6”,使用时只需在上述加法指令后面紧跟一条“DAA”指令即可。
5.片内RAM20H~2FH单元中的128个位地址与直接地址00H~7FH形式完全相同,如何在指令中区分出位寻址操作和直接寻址操作?
解:
虽然内部RAM位寻址区的位地址范围00H~7FH与低128个单元的单元地址范围00H~7FH形式完全相同,但是在应用中可以通过指令的类型区分单元地址和位地址。
位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。
MOVC,bitMOVbit,CCLRbitSETBbitCPLbitANLC,bitANLC,/bitJBbit,relJNBbit,rel
6.8051单片机指令系统中有长跳转LJMP,长调用LCALL指令,为何还设置了绝对跳转AJMP,绝对调用ACALL指令?
在实际使用是应怎样考虑?
解:
在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP和短跳转指令AJMP、长调用指令LCALL和短调用指令ACALL。
长跳转LJMP在64KB范围内转移,而短跳转AJMP只能在2KB空间转移。
长调用LCALL调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程序空间范围的子程序。
AJMP、ACALL指令代码长度为2个字节;LJMP、LCALL指令代码长度为3个字节。
7.SJMP,AJMP和LJMP指令在功能上有何不同?
解:
指令的转移范围不同。
SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP是64KB范围内的无条件长跳转指令。
8.MOVCA,@A+DPTR与MOVXA,@DPTR指令有何不同?
解:
MOVC指令是针对程序存储器的数据传送指令,@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到被访问字节地址的偏移量。
MOVX指令是针对外部RAM的数据传送指令,@DPTR寄存器间接寻址时,寻址范围在0~64KB。
9.在“MOVCA,@A+DPTR”和“MOVCA,@A+PC”中,分别使用了DPTR和PC作基址,请问这两个基址代表什么地址?
使用中有何不同?
解:
使用@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到被访问字节地址的偏移量。
使用@A+PC基址变址寻址时,PC仍是下条指令首地址,而A则是从下条指令首地址到常数表格中的被访问字节的偏移量。
10.设片内RAM中的(40H)=50H,写出执行下列程序段后寄存器A和R0,以及片内RAM中50H和51H单元的内容为何值?
MOVA,40H
MOVR0,A
MOVA,#00
MOV@R0,A
MOVA,#30H
MOV51H,A
MOV52H,#70H
解:
结果为:
(A)=30H(R0)=50H(50H)=00H(51H)=30H
11.设堆栈指针(SP)=60H,片内RAM中的(30H)=24H,(31H)=10H。
执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?
解:
结果为:
(61H)=24H(62H)=10H(30H)=00H
(31H)=0FFHDPTR=2410H SP=60H
12.在8051的片内RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。
分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。
MOVA,40H
MOVR0,A
MOVP1,,#80H
MOV@R0,20H
MOVDPTR,#2000H
MOV40H,30H
MOVR0,30H
MOVD0H,R0
MOV10H,#10H
MOV50H,R0
MOVA,@R0
MOVP2,P1
解:
指令源操作数的寻址方式执行指令后的结果
MOVA,40H直接寻址(A)=50H
MOVR0,A寄存器寻址(R0)=50H
MOVP1,#80H立即寻址(P1)=80H
MOV@R0,20H寄存器间接寻址(50H)=30H
MOVDPTR,#2000H立即寻址(DPTR)=2000H
MOV40H,30H直接寻址(40H)=40H
MOVR0,30H直接寻址(R0)=40H
MOVD0H,R0直接寻址(D0H)=40H
MOV10H,#10H立即寻址(10H)=10H
MOVA,@R0寄存器间接寻址(A)=40H
MOVP2,P1寄存器寻址(P2)=80H
13.指出下列程序中每一条指令的划线操作数的寻址方式及其完成的操作。
MOV3FH,#40H;3FH为直接寻址,指令把数40H送地址3FH中
MOVA,3FH;A为特殊寄存器寻址,把地址3FH中的内容送A中
MOVR1,#3FH;3FH为立即寻址,指令把数3FH送寄存器R1中
MOVA,@R1;R1间接寻址,R1的内容3FH作地址中的内容送A中
MOV3FH,R1;寄存器寻址,R1的内容送地址3FH中
14.内部RAM的4FH单元,可用哪几种方式寻址?
分别举例说明。
答:
1、直接寻址:
MOVR1,4FH
2、间接寻址:
MOVR1,#4FH和MOVA,@R1
15.特殊功能寄存器可用哪几种方式寻址?
分别举例说明。
答:
只有直接寻址:
MOVA,90H(MOVA,P1);该指令只有机器码E590H。
16.编程:
将立即数55H送入内部RAM的30H单元。
(1)用立即寻址
(2)用寄存器寻址(3)用寄存器间接寻址
答:
(1)MOV30H,#55H
(2)MOVR1,#55HMOV30H,R1
(3)MOVR1,#30HMOV@R1,#55H
17.用指令实现下述数据传送:
(1)内部RAM30H单元的内容送内部RAM40H单元。
答:
MOV40H,30H
(2)外部RAM30H单元的内容送R0寄存器
答:
MOVR1,#30H
MOVXA,@R1
MOVR0,A
(3)外部RAM30H单元的内容送内部RAM30H单元
答:
MOVR1,#30H
MOVXA,@R1
MOV30H,A
(4)外部RAM2000H单元的内容送内部RAM20H单元
答:
MOVDPTR,#2000H
MOVXA,@DPTR
MOV20H,A
(5)外部ROM2000H单元的内容送内部RAM20H单元
答:
MOVDPTR,#2000H
MOVA,#00H
MOVCA,@A+DPTR
MOV20H,A
(6)外部ROM2000H单元内容送外部RAM20H单元。
答:
MOVDPTR,#2000H
MOVA,#00H
MOVCA,@A+DPTR
MOVR1,#20HMOVX@R1,A
18.指出下列指令执行后目的操作数的结果,并写出每条指令的机器码。
可不管上下句联系。
其中(R0)=30H。
MOV30H#52H;(30H)=52H
MOVA,#78H;(A)=78H
MOVA,#30H;(A)=30H
MOVR0,#30H;(R0)=30H
MOVA,@R0;(A)=52H,把30H的内容送A中。
19.指出在下列各条指令中,45H代表什么寻址方式?
(1)MOVA,#45H;立即寻址
(2)MOV45H,#46H;立即寻址
(3)MOV45H,46H;直接寻址
(4)MOVC,45H;位寻址
20.分析下列指令顺序执行的结果,并写出每条指令的机器码。
(1)MOVA,#32H;7432H
(2)MOVDPTR,#2020H;902020H
(3)MOVX@DPTR,A;F0H
(4)MOV20H,#45H;752045H
(4)MOVR0,#20H;7820H
(5)MOVXA,@R0;E2H
(6)MOV30H,A;F530H
结果:
片外存储器RAM2020H内容为32H,(30H)=(A)=45H
23.指出以下程序顺序执行后每一条指令的结果。
填写在划线部分。
(1)MOVA,#25H;(A)=25H
(2)MOV40H,#1AH;(40H)=1AH
(3)MOVR2,#33H;(R2)=33H
(4)CLRC;(C)=0
(5)ADDA,R2 ;(A)=58H
(6)ADDCA,40H ;(A)=72H
(7)MOVR0,#40H ;(R0)=40H
(8)ADDCA,@R0 ;(A)=8CH
24.在划线部分写出下列程序每一条指令执行后其目的操作数的结果。
(1)MOVA,#0F0H;0F0H
(2)CPLA;0FH
(3)ANL30H,#00H;00H
(4)ORL30H,#BDH;0BDH
(5)XRL30H,A;0B2H
25.若(A)=7AH,分别执行下列指令后,A的值是多少?
填在划线部分。
标志位CY和OV的值各是多少?
不考虑上下指令之间的联系。
(1)ANLA,#0FFH;7AH
(2)ORLA,#0FFH;0FFH
(3)ANLA,#00H;00H
(4)ORLA,#00H;7AH
(5)XRLA,#0FFH;85H
(6)XRLA,00H;7AH
26.请判断下列各条指令的书写格式是否有错,如有错说明原因:
答:
打(×)为不存在指令.
1、mulr0r1(×)2、mova,@r7(×)3、mova,#3000h(×)4、movc@a+dptr,a(×)
5、ljmp#1000h(×)6、MOVX@R0,B(×)7、MOVA,30H(√)8、MOVXA,30H(×)
9、ADDCA,R7(√)10、ANL#99H,36H(×)
27.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?
MOVR1,#30H;(R1)=30H
MOVA,#64H;(A)=64H
ADDA,#47H;(A)=0ABH,(CY)=0,(AC)=0
DAA;(A)=11,(CY)=1,(AC)=1
MOV@R1,A;(R1)=30H,(30H)=11H
此程序段完成的功能:
程序采用十六进制运算指令完成十进制数运算64+47=11,且进位为1。
结果在30H单元。
注意到DAA的功能。
28.内部RAM的4FH单元,可用哪几种方式寻址?
分别举例说明。
答:
1.直接寻址:
MOVR1,4FH2.间接寻址:
MOVR1,#4FH和MOVA,@R1
29.编程:
将立即数55H送入内部RAM的30H单元。
(1)用立即寻址MOV30H,#55H
(2)用寄存器寻址MOVR1,#55HMOV30H,R1(3)用寄存器间接寻址MOVR1,#30H MOV@R1,#55H
30.用指令实现下述数据传送:
(1)内部RAM30H单元的内容送内部RAM40H单元。
答:
MOV40H,30H
(2)外部RAM30H单元的内容送R0寄存器
答:
MOVR1,#30HMOVXA,@R1MOVR0,A
(3)外部RAM30H单元的内容送内部RAM30H单元
答:
MOVR1,#30HMOVXA,@R1 MOV30H,A
(4)外部RAM2000H单元的内容送内部RAM20H单元
答:
MOVDPTR,#2000H MOVXA,@DPTR MOV20H,A
(5)外部ROM2000H单元的内容送内部RAM20H单元
答:
MOVDPTR,#2000HMOVA,#00H MOVCA,@A+DPTR MOV20H,
(6)外部ROM2000H单元内容送外部RAM20H单元。
答:
MOVDPTR,#2000HMOVA,#00HMOVCA,@A+DPTR
MOVR1,#20HMOVX@R1,A
三.编程题
1.试编程实现内部RAM25H单元与外部RAM5500H单元的数据交换。
MOVDPTR,#5500HMOVXA,@DPTR XCHA,25HMOVX@DPTR,A
2.试编程实现外部RAM2040H单元的内容与3040H单元互换。
MOVDPTR,#2040H MOVXA,@DPTR MOV30H,A
MOVDPTR,#3040H MOVXA,@DPTR XCHA,30H
MOVX@DPTR,A MOVDPTR,#2040H MOVA,30H MOVX@DPTR,A
3.试编程实现两个无符号16位数的减法。
被减数和减数分别存放在DATA1和DATA2为首址的内部RAM中,低位在低地址单元,高位在后,差存于R3(低8位)和R4(高8位)中.
CLRC MOVR0,#DATA1 MOVA,@R0 MOVR1,#DATA2 SUBBA,@R1 MOVR3,A INCR0 INCR1 MOVA,@R0 SUBBA,@R1 MOVR4,A
4.若外部RAM的(2000H)=X,(2001H)=Y,编程实现Z=3X+2Y,结果存入内部RAM20H单元(设Z<255)
MOVDPTR,#2000HMOVXA,@DPTR MOVB,#03H MULAB
MOVB,A;存3XMOVDPTR,#2001H MOVXA,@DPTR MOV20H,A
ADDA,20H;计算2Y ADDA,B;3X+2Y MOV20H,A
5.完成以下的数据传送过程。
解:
(1)R1的内容传送到R0;
MOVA,R1MOVR0,A
(2)片外RAM20H单元内容送R0;
MOVDPTR,#0020HMOVXA,@DPTRMOVR0,A
(3)片外RAM20H单元的内容送片内RAM20H单元;
MOVDPTR,#0020HMOVXA,@DPTRMOV20H,A
(4)片外RAM1000H单元的内容送片内RAM20H单元;
MOVDPTR,#1000HMOVXA,@DPTRMOV20H,A
(5)ROM2000H单元的内容送R0单元;
MOVA,#00HMOVDPTR,#2000HMOVCA,@A+DPTRMOVR0H,A
(6)ROM2000H单元的内容送片内RAM20H单元;
MOVA,#00HMOVDPTR,#2000HMOVCA,@A+DPTRMOV20H,A
(7)ROM2000H单元的内容送片外RAM20H单元。
MOVA,#00HMOVDPTR,#2000HMOVCA,@A+DPTR
MOVDPTR,#0020HMOVX@DPTR,A
6.设有两个4位BCD码,分别存放在片内RAM的23H,22H单元和33H,32H单元中,求它们的和,并送入43H,42H单元中去。
(以上均为低位字节,高位在高字节)。
ORG0000H
LJMPSTART
ORG0030H
START:
MOVA,22H
ADDA,32H
DAA
MOV42H,A
MOVA,23H
ADDCA,33H
DAA
MOV43H,A
SJMP$
END
7.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVR7,#20H
MOVR1,#40H
MOVDPTR,#3000H
LOOP:
MOVA,@R1
MOVX@DPTR,A
INCR1
INCDPTR
DJNZR7,LOOP
SJMP$
END
8.编程计算片内RAM区30H~37H的8个单元中数的算术平均值,结果存在3AH单元中。
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVR0,#30H;数据首地址
MOVR1,#00H;和高位
MOVR2,#00H;和低位
MOVR3,#07H;循环次数
LP2:
MOVA,@R0
ADDA,R2
MOVR2,A
JNCLP1
INCR1
LP1:
INCR0
DJNZR3,LP2
MOVR3,#03H
LP3:
CLRC
MOVA,R1
RRCA;和高位除2
MOVR1,A
MOVA,R2;和低高位除2
RRCA
MOVR2,A
DJNZR3,LP3
MOV3AH,R2
SJMP$
END
9.设有100个有符号数,连续存放在片外RAM以2200H为首地址的存储区中,试片成统计其中正数|、负数、零的个数。
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVR2,#100
MOVR3,#00H;零的个数
MOVR4,#00H;正数的个数
MOVR5,#00H;负数的个数
MOVDPTR,#2000H
LOOP:
MOVXA,@DPTR
CJNEA,#00H,NET1
INCR3
INCDPTR