内容正文:
四川省(电子信息大类)对口招生《单片机原理与应用》
复习讲义
模块 3 单片机指令系统
考点五 控制转移类指令
【考纲要求】
掌握MCS-51系列控制转移类指令的形式和功能。
【知识网络】
【知识和技能要点】
控制转移类指令
一、无条件转移指令
1.绝对转移转移指令:AJMP addr ll
2K字节范围内的无条件跳转指令,64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址(pc)的高5位地址码A15~A11相同。(本指令是为能与MCS-48的JMP指令兼容而设的。不建议使用 )
2.长转移指令:LJMP addr16
指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指出的目标地址。目标地址可以在64K程序存储器地址空间的任何位置。
3.短转移指令:SJMP rel
在编写程序时,直接写上要转向的目标地址标号就可以,由汇编程序自动计算和填入偏移
量。跳转目标地址处于当前PC值的-128字节--+127字节之间
4. 间接转移指令:JMP@A+DPTR
由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。给A赋予不同的值,即可实现程序的多分支转移。
2、 条件转移指令
1.判断累加器是否为0转移指令
JZ rel;如果累加器为“0”,则转移
JNZ rel;如果累加器非“0”,则转移
规定的条件满足,则进行转移,跳转到相应标号处。跳转目的地址的要求同SJMP。
条件不满足则顺序执行下一条指令。
2.比较转移指令
CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE@Ri,#data,rel
比较前面两个操作数的大小,如果它们的值不相等则转移,转移的目的地址要求同SJMP。
如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置进位标志位Cy,否则清
“0”Cy。
7.减1条件转移指令
这是一组把减1与条件转移两种功能结合在一起的指令。共两条指令:
DJNZ Rn,rel;n=0~7
DJNZ direct,rel
将源操作数(Rn或direct)减1,结果回送到Rn寄存器或direct中去。如果结果不为0则转移,转移的目的地址要求同SJMP。
主要用于控制程序循环。以减1后是否为“0”作为转移条件,即可实现按次数控制循环。
三、子程序调用与返回指令
1.子程序调用指令
(1)绝对调用指令:ACALL addr ll
与AJMP指令相类似
(2)长调用指令:LCALL addr16
该指令执行时,MCS51执行如下操作:
(1)当前PCL、PCH进栈
(2)addr 16送入PC
2.返回指令
(1)子程序返回指令:RET
执行本指令时:
(SP)→PCH,然后(SP)-1→SP
(SP)→PCL,然后(SP)-1→SP
功能是从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值开始继续执行程序。
(2)中断返回指令:RETI
功能与RET指令相似,两指令不同之处,是本指令清除了中断响应时,被置“1”的MCS-51内部中断优先级寄存器的优先级状态。
四、空操作指令:NOP
【练习题】
1、 填空题
1.JZ rel的操作码地址为1000H,rel=20H,它的转移目的地址为____________。
2.指令LCALL 37B0H,首地址在2000H,所完成的操作是__________ 入栈,_________ →PC。
3.SJMP rel的指令操作码地址为0050H,rel=65H,那么它的转移目标地址为____________ 。
4.假定累加器A中的内容为30H,执行指令
1000H:MOVC A,@A+PC
后,把程序存储器___________ 单元的内容送入累加器A中。
5.已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行“RET”指令后,SP= __________ ,PC= __________ 。
二、选择题
1.在MCS-51指令中,下列哪条指令属于无条件短转移指令?()
A. LJMP addr16
B. SJMP rel
C. AJMP addr11
D. JMP @A+DPTR
2.执行指令 DJNZ R0, rel 时,操作顺序是()
A. 先判断R0是否为0,再减1
B. 先将R0减1,再判断是否为0,非0则转移
C. 直接转移,不改变R0
D. R0清零后转移
3.关于MCS-51的长跳转指令LJMP,下列说法正确的是()
A. 只能在同一2KB范围内跳转
B. 可在64KB程序存储空间任意跳转
C. 转移目标地址由A和DPTR共同决定
D. 属于条件转移指令
4.下列指令中,不属于条件转移指令的是( )
A. JZ rel
B. JC rel
C. SJMP rel
D. JNZ rel
5.指令 AJMP addr11 的跳转范围是( )
A. 同一256B内
B. 同一2KB程序存储器页内
C. 整个64KB空间
D. 相对当前地址±128B
6.执行 CJNE A, #data, rel 指令,当A中的数据与立即数不相等时,程序将( )
A. 顺序执行下一条指令
B. 跳转到目标地址
C. 复位程序计数器
D. 停止执行
7.关于间接转移指令 JMP @A+DPTR,下列描述正确的是( )
A. 只能实现短距离转移
B. 转移地址由DPTR基址和A偏移量共同形成
C. 属于条件转移
D. 执行后会改变DPTR的值
8.指令 DJNZ direct, rel 中,操作数direct代表的是( )
A. 立即数
B. 直接寻址的内部RAM单元
C. 寄存器R0~R7
D. 程序存储器地址
9.若要实现“累加器A内容为0则转移”,应选用的指令是( )
A. JNZ rel
B. JZ rel
C. JB bit, rel
D. JBC bit, rel
10.下列指令执行时,不修改PC中内容的指令是( )。
A.AJMP B.MOVC A,@ A+PC C.MOVC A,@ A+DPTR D.MOVX A,@Ri
三、判断题
1.LJMP addr16 是长跳转指令,可在 64KB 程序存储器空间内任意跳转。( )
2.SJMP rel 是短跳转指令,跳转范围为 -128~+127 字节。( )
3.JZ rel 指令的功能是:若累加器 A 不为 0 则跳转。( )
4.ACALL addr11 为绝对调用指令,可调用 2KB 范围内的子程序。( )
5.RET 指令用于从子程序返回,RETI 用于从中断服务程序返回,二者功能完全相同。( )
四、分析题
1.当前指令地址为 2500H,执行指令 AJMP 0780H,已知 PC 执行该指令后先自增 2,且 AJMP 指令的高 5 位与 PC 自增后的高 5 位一致,求跳转后的 PC 目标地址,并判断该跳转是否合法。
2.程序在 3000H 处执行 LCALL 指令,调用子程序,执行后 PC 跳转至 4000H,且堆栈指针 SP 初始值为 40H,求压入堆栈的返回地址,以及执行 LCALL 后 SP 的最终值。
【答案】
一、填空题
1.1022H ; 2.2003H 37B0H
3.00B7H ; 4. 1031H
5.23H 3412H
二、选择题
1.B 2.B 3.B 4.C 5.B 6.B 7.B 8.B 9.B 10.D
三、判断题
1.√
2.√
3.×(JZ 是A=0才跳转)
4.√
5.×(RETI会恢复中断优先级,RET不会)
四、分析题
1. AJMP 跳转计算
当前指令地址:2500H
PC = 2500H + 2 = 2502H
高5位:2502H → 00100
目标地址高5位必须和它相同,才能合法跳转。
0780H 高5位:00000
00000 ≠ 00100 → 跳转不合法
2. LCALL 分析
指令地址 3000H,返回地址 = 3000H +3 = 3003H
SP初始=40H
压栈2字节:SP=40H+2=42H
【真题演练】
1. (24单招,单选题)在MCS-51单片机中,要调用子程序ABC时,需要使用哪一个指令( )
A.JZ ABC B.JNZ ABC
C. LCALL ABC D.LJMP ABC
2.(25单招,单选题)MCS-51单片机中,RETI指令的功能是( )
A.中断程序调用 B.子程序调用
C.中断程序返回 D.子程序返回
【答案】
1.C ;2.C
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$