内容正文:
四川省(电子信息大类)对口招生《单片机原理与应用》
复习讲义
模块 3 单片机指令系统
考点二 数据传送类指令
【考纲要求】
掌握MCS-51系列数据传送类指令的形式和功能。
【知识网络】
【知识和技能要点】
数据传送类指令
使用最频繁的一类指令,通用格式:
MOV <目的操作数>,<源操作数>,属“ 复制”性质,而不是“搬家”
数据传送类指令不影响标志位, Cy、Ac和OV,但不包括奇偶标志位P
1.以累加器为目的操作数的指令
MOV A,Rn ; (Rn)→A,n=0~7
MOV A,@Ri ; ((Ri))→A, i=0,1
MOV A,direct ;(direct)→A
MOV A,#data ; #data→A
2. 以Rn为目的操作数的指令
MOV Rn,A ; (A)→Rn,n=0~7
MOV Rn,direct ;(direct) →Rn,n=0~7
MOV Rn,#data ; #data→Rn,n=0~7
功能:是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。
3.以直接地址direct为目的操作数的指令
MOV direct,A ; (A)→direct
MOV direct,Rn; (Rn)→direct, n=0~7
MOV direct1,direct2;
MOV direct,@Ri ; ((Ri))→direct
MOV direct,#data; #data→direct
功能: 把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或
SFR的地址。
4.以寄存器间接地址为目的操作数的指令
MOV @Ri,A ;(A)→ ((Ri)), i=0,1
MOV @Ri,direct ; (direct) → ((Ri))
MOV @Ri,#data ; #data→ ((Ri))
5.16位数传送指令
MOV DPTR,#data16 ; #data16→DPTR
唯一的16位数据的传送指令 ,立即数的高8位送入DPH,立即数的低8位送入DPL。
6.堆栈操作指令
MCS-51内部RAM中可以设定一个后进先出的区域称作堆栈,堆栈指针SP指出堆栈的栈顶位置。
(1)进栈指令:PUSH direct
先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。
(2)出栈指令:POP direct
SP指示的栈顶内容送入direct字节单元中,栈指针SP减1。
7.累加器A与外部数据存储器传送指令
MOVX A,@DPTR ;((DPTR))→A,读外部RAM/IO
MOVX A,@Ri ;((Ri))→A,读外部RAM/IO
MOVX @DPTR,A;(A)→ ((DPTR)),写外部RAM/IO
MOVX @Ri,A ;(A)→ ((Ri)),写外部RAM/IO
功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。
注意:RD*或WR*信号有效。
采用DPTR间接寻址,高8位地址(DPH) 由P2口输出,低8位地址(DPL)由P0口输出。
采用Ri(i=0,1)间接寻址,可寻址片外256个单元的数据存储器。Ri内容由P0口输出。
8位地址和数据均由P0口输出,可选用其它任何输出口线来输出高于8位的地址(一般选用P2口输出高8位的地址)MOV后 “X”表示单片机访问的是片外RAM存储器或I/O。
8.查表指令
共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。
(1) MOVC A,@A+PC
以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。
注意:PSEN*信号有效。
优点:不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。
缺点:表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。
(2) MOVC A,@A+DPTR
以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A。表格的大小和位置可以在64K程序存储器中任意安排,一个表格可以为各个程序块公用。
两条指令是在MOV的后面加C,“C”是CODE的第一个字 母,即代码的意思。
9.字节交换指令
XCH A,Rn
XCH A,direct
XCH A,@Ri
10.半字节交换指令
XCHD A,@Ri 累加器的低4位与内部RAM低4位交换。
SWAP A 累加器的低4位与内低4位交换。
【练习题】
一、填空题
1.将30H送到内部RAM 40H的指令是______________。
2.将内部RAM 30H中的数据送到外部RAM 2000H单元的指令是____________,___________。
3.将ROM 1000H存储单元的数据送到内部RAM 30H存储单元的指令是_____________,_________________,______________________________。
4.(SP)=60H ,( 30H)=0FH,执行PUSH 30H指令,则(SP)=__________,(61H)=__________。
5.(A)=0FH,执行SWAP A 指令后(A)=______________。
6. 指令MOV 60H, @R0中,源操作数的寻址方式是__________,目的操作数的寻址方式是__________。
二、选择题
1.关于MOVX指令,下列说法错误的是( )
A. 用于外部RAM与累加器A之间的数据传送
B. 可采用寄存器间接寻址
C. 能直接实现外部RAM两个单元之间的数据传送
D. 执行时会产生WR或RD控制信号
2. 单片机汇编指令最多是( )。
A.数据传输类指令 B. 算术运算类指令 C. 逻辑运算类指令 D.控制转移类指令
3. 外部传输指令的指令助力符是( )。
A.MOV B.MOVC C. MOVX D.XCH
4.下列指令错误的是( )。
A.MOV A,#30H B. MOV 40H,30H
C.MOV R2,R1 D. MOV A,@R0
5.将累加器A中的数送入外RAM的40H单元,可执行的指令是( )。
A. MOV R1 ,#40H B .MOV R1 ,#40H
MOVX @R1 , A MOVX R1 , A
C .MOVX 40H , A D . MOV R1, #40H
6. 执行指令MOV DPTR, #8765H后,DPH和DPL的取值正确的是( )
A. DPH=87H,DPL=65H B. DPH=65H,DPL=87H
C. DPH=8765H,DPL=00H D. DPH=00H,DPL=8765H
7. 下列指令中,不能实现累加器A与外部RAM单元2050H之间数据传送的是( )
A. MOV DPTR, #2050H MOVX A, @DPTR
B. MOV R0, #50H MOV P2, #20H MOVX A, @R0
C. MOV R1, #50H MOV DPTR, #2000H MOVX A, @R1
D. MOV DPTR, #2050H MOVX @DPTR, A
8. 关于MCS-51的堆栈操作指令,下列说法正确的是( )
A. PUSH指令执行时,先将数据压栈,再使SP加1
B. POP指令执行时,先使SP加1,再弹出数据
C. PUSH ACC与PUSH A指令功能一致
D. 堆栈操作只能对累加器A和寄存器B进行
9. 执行指令MOV R1, #0FH后,再执行MOV @R1, #00H,其操作的内部RAM单元地址是( )
A. 0FH B. R3 C. 00H D. 1FH
10. 下列指令中,属于片外ROM数据传送指令的是( )
A. MOV B. MOVX C. MOVC D. PUSH
三、判断题
1. MCS-51系列中,MOV指令可实现内部RAM单元之间、寄存器与内部RAM之间的数据传送,但不能直接实现外部RAM与内部RAM之间的传送。( )
2. 执行指令MOV A, #00H后,累加器A中的数据为00H,同时PSW寄存器中的奇偶标志位会置1。( )
3. 寄存器间接寻址方式中,R0和R1可寻址内部RAM的00H~7FH单元,也可通过P2口配合寻址外部RAM的全部单元。( )
4. PUSH B指令是将寄存器B中的数据压入堆栈,执行后SP的值自动减1。( )
5. MOVC A, @A+DPTR指令的功能是将片外ROM中(A+DPTR)地址单元的数据传送到累加器A中,属于变址寻址。( )
6. 执行指令MOV 30H, 40H后,内部RAM 30H单元的数据被修改,40H单元的数据保持不变。( )
四、简答题
1.已知:内部 RAM (30H) = 20H,R1=30H。执行指令:MOV A,@R1 后,累加器 A 的值为多少?
2. 已知:SP=60H,内部 RAM 40H 单元内容 = 88H。执行指令:PUSH 40H 后,SP 的值为多少?61H 单元的内容为多少?
3. 指出下列指令的错误原因并改正(MCS-51 指令规则)。
①MOV A,@R2
②MOVX A,#30H
③MOV 30H,#200
④PUSH R0
【答案】
1、 填空题
1.MOV 40H, #30H
解析:立即数送内部RAM直接地址,立即数用#标识。
2.MOV DPTR,#2000H MOVX @DPTR,A
解析:访问外部RAM必须用MOVX,且只能通过A中转。
3.MOV DPTR,#1000H MOVC A,@A+DPTR MOV 30H,A
解析:访问ROM必须用MOVC,通过A中转到内部RAM。
4.61H ; 0FH
解析:PUSH先SP+1,再将数据压入SP指向单元。
5.F0H
解析:SWAP A是高低4位互换,0FH → F0H。
6.寄存器间接寻址;直接寻址
2、 选择题
1.C
解析:MOVX必须通过A中转,不能直接传送两个外部RAM单元。
2.A
解析:51单片机中数据传送类指令数量最多。
3.C
解析:MOVX → 外部RAM;MOVC→ROM;MOV→内部。
4.C
解析:51指令不支持寄存器之间直接传送(MOV R2,R1)。
5.A
解析:外部RAM只能用MOVX @R1,A格式。
6.A
解析:DPTR=DPH(高8位)+DPL(低8位),8765H → DPH=87H,DPL=65H。
7.C
解析:@R1只能配合P2使用,不能和DPTR混用寻址2050H。
8.C
解析:ACC是A的直接地址写法,PUSH ACC = PUSH A。
9.A
解析:@R3是错误写法,R3中为0FH,寻址0FH单元。
10.C
解析:MOVC 是专门访问程序存储器ROM的指令。
三、判断题(答案+解析)
1.√
解析:MOV只操作内部,内部↔外部必须用MOVX+A中转。
2.×
解析:00H中1的个数为0,奇偶标志P=0。
3.√
解析:R0/R1用于间接寻址,配合P2可访问全部外部RAM。
4.×
解析:PUSH执行后SP +1,不是减1。
5.√
解析:MOVC是查表指令,访问ROM,属于变址寻址。
6.√
解析:数据传送不改变源操作数,只改变目的单元。
四、简答题
1.A=20H
解析:MOV A,@R1 表示将R1中的地址(30H)里的内容送入A。
2.SP=61H,61H单元=88H
解析:PUSH规则:先SP+1,再存数据。
3.指令改错
① MOV A,@R2 → 错误:间接寻址只能用R0/R1
改正:MOV A,@R0
② MOVX A,#30H → 错误:MOVX不能用立即数
改正:MOVX A,@DPTR
③ MOV 30H,#200 → 错误:200需写十六进制#0C8H
改正:MOV 30H,#0C8H
④ PUSH R0 → 错误:PUSH只能用直接地址
改正:PUSH 00H
【真题演练】
1.(24单招,单选题)下列哪一个是合法汇编指令。( )
A. MOVX A, @DPTR B.MOVX A,R0
C. MOVX A, #01H D.MOVX A, 01H
2.(24单招,单选题)MCS-51单片机内部数据存储区中,00H单元的值为10H,40H单元的值为50H。当执行完指令“MOV R0,40H”后,R0的值为多少。( )
A. 10H B.40H C.50H D.90H
3.(25单招,单选题)MCS-51单片机中,能够访问程序存储器的指令是( )
A. MOVC A,@A+DPTR B. MOVC A,@DPTR
C. MOVX @DPTR,A D. MOV A,@RO
3.(25单招,判断题)MCS-51单片机用于进栈的指令是PUSH。( )
【答案】
1.A ; 2.C ;3.A ;4.√
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$