单片机系统指令的控制转移指令

如题所述

第1个回答  2016-06-03

一、无条件转移指令 AJMP addrll (2字节指令)
2K(地址211)字节范围内的无条件跳转指令。
64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址高5位地址码A15-A11相同。
指令执行时,先PC加2,然后把addrll送入PC.10~PC.0,
PC.15~PC.11保持不变,程序转移到目标地址。
注意:转移目标首地址必须在AJMP指令下一条指令地址(PC+2)的2KB范围内。
二、长跳转指令 LJMP addr16 (3字节指令)
64K字节范围内的无条件跳转指令。
指令执行时,把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指出的目标地址。
目标地址可以在64K程序存储器地址空间的任何位置。
注意:短跳转、长跳转指令中addrll、addr16直接写上要转向的目标地址标号(即符号地址)就可以。
三、相对转移指令 SJMP rel (双字节)
rel为8位带符号二进制补码数(-128~+127),实现程序的双向转移。
在编写程序时,直接写上要转向的目标地址标号就可以。
四、间接跳转(散转)指令JMP @A+DPTR (三字节)
由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。
五、条件转移指令 (双字节)
JZ rel ; 如果累加器为“0”,则转移
JNZ rel; 如果累加器非“0”,则转移
六、比较不相等转移指令(3字节指令)
CJNE A, direct, rel
CJNE A, #data, rel
CJNE Rn, #data, rel
CJNE @Ri, #data, rel
1、比较前面两个操作数(无符号整数)的大小,如果不相等则
转移,若相等则顺序执行下一条指令。
2、如果第一操作数小于第二操作数, 则Cy标志位置1, 否则清0。
如常把CJNE 第一操作数, 第二操作数, $+3
和JNC rel或JC rel 写在一块来判别2个数的大小。
$:本条指令在程序存储单元的首地址;
$+3:CJNE指令的下一条指令,即JNC rel或JC rel
七、减1不为0转移指令
DJNZ Rn, rel ;n=0~7
DJNZ direct, rel
将源操作数内容减1,结果回送到Rn寄存器或direct中去。如果源操作数内容不为0则转移,为0则顺序执行下一条指令。
主要用于控制程序循环。
1、把寄存器Rn或内部RAM的direct单元用作程序循环计数器
2、以减1后是否为“0”作为转移条件,实现按次数控制循环
八、子程序调用、返回指令
1、短调用指令 ACALL addr11 (双字节)
2K范围内的子程序调用。
2、长调用指令 LCALL addr16 (三字节)
64K范围内的子程序调用。
执行本指令时:
(1)断点地址(调用指令的下一条指令的首地址PC+2或PC+3)
保护
(SP)+1→SP,然后PCL →(SP)
(SP)+1→SP,然后PCH →(SP)
(2)将子程序首地址送入PC,执行子程序
3、子程序返回指令 RET
断点地址恢复
(SP) →PCH,(SP) - 1→SP
(SP) →PCL ,(SP) - 1→SP
功能:从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值开始继续执行程序。不影响标志位。
4、中断返回指令 RETI
与RET指令相似,不同之处在于断点地址恢复,清除中断响应时被置“1”的51内部中断优先级寄存器的优先级状态。
子程序是编程时就已确定的固定位置调用,而中断服务子程序是由中断系统控制在特定条件下随机调用的。
九、空操作指令 NOP,消耗1个机器周期的时间

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网