首页 理论教育 单片机控制转移类指令

单片机控制转移类指令

时间:2023-10-28 理论教育 版权反馈
【摘要】:表明PC转移地址中的低11位地址信息分布在指令码第一和第二字节之中,且只可在2KB绝对地址范围内转移。注:由于AJMP为2字节指令,A值必须按偶数递增。它和转移指令有着本质的不同。

单片机控制转移类指令

程序计数器(PC)装入不同的数值,可使程序转移到新的地址执行,指令共有17条。

1.无条件转移指令(4条,不影响PSW标志位)

(1)LJMP长转移指令(3字节)

LJMP addr16 ;(PC)←addr16。16位地址高8位装PCH,低8位装PCL,64KB内转移。

(2)AJMP绝对转移指令(2字节)

AJMP addr11 ;(PC)←addr11。第一字节从高位到低位装入11位地址中的高3位A10、A9、A8,然后装入操作码00001,第二字节装入11位地址中的低8位A7~A0,构成了16位的指令码(机器码)。表明PC转移地址中的低11位地址信息分布在指令码第一和第二字节之中,且只可在2KB绝对地址范围内转移。

注:PC当前值的高5位(PC15、PC14、PC13、PC12、PC11)有32种组合,可指定64KB地址中的32个页区(每页含2KB)。

例:设(PC)=3060H,执行AJMP318AH(转移目标地址的高5位须与当前PC的高5位相同)

结果:(PC)←(PC+2)=3062H

PC高5位地址不变,只改PC低11位地址为18AH,得转移地址=001100011000 1010B=318AH。

再强调一下,AJMP指令只能在2KB绝对地址范围内跳转(即同一页区范围内),示例如下:

(3)SJMP相对转移指令(2字节)

目的地址为当前PC与偏移量rel之和所指的单元,偏移量rel为8位带符号数(2的补码),字节范围为-128~+127(负数向后转移而正数向前转移)。编译器会自动算出相对地址值。

例:(PC)=1300H单元存放有SJMP指令:1300H SJMP16H

rel=16H为正数,正向转移

目的地址为:1300H+02H+16H=1318H

(4)JMP相对长转移指令(1字节)

JMP @A+DPTR;(PC)←(A)+(DPTR)

属无条件散转指令,指针DPTR与累加器A(偏移量)的内容之和作目的地址,而两者内容不修改,在64KB范围内按A的偏移值作分支转移。

注:由于AJMP为2字节指令,A值必须按偶数递增。

2.条件转移指令(8条)(www.xing528.com)

以上一条指令的执行结果作为判断条件,条件满足时转移执行,否则仍按原顺序进行。

(1)判零条件转移(2字节,2条)

(2)CJNE数值比较转移(3字节,4条)

注:指令的比较过程相当于执行减法,不影响操作数。若够减则无借位,进位位CY为0,否则为1;可结合受影响的进位位CY,作为大于或小于转移的判断条件。

例:如果A≥26,要求转移到LOOP分支;

如果A<26,要求转移到OK分支。

编程参考:

(3)DJNZ减1条件转移(2条)

注:前者属双字节、后者属三字节指令。在循环程序中作计数器减1操作十分有用。

例:二层循环的软件延时程序(尽量占用高端的寄存器作计数器)

3.子程序调用及返回指令(4条)

子程序调用时把断点地址压入堆栈保护,然后转向子程序入口执行,完成后返回程序断点处继续执行后续程序。它和转移指令有着本质的不同。

(1)LCALL,ACALL子程序调用指令

注:第一条为三字节指令,子程序调用范围64KB。先修改(PC)←(PC)+3,变成下一条指令的地址;把PC按先低、后高字节入栈保护(结果指针SP加了2),然后把目的地址addr16装入PC。

第二条为双字节指令,子程序调用需与PC在同一个2KB绝对地址范围。先修改(PC)←(PC)+2,变成下一条指令的地址,其余过程同上。11位调用地址的形成与AJMP指令相同,机器码组成:

(2)RET,RETI返回指令

注:RET必须是子程序的最后一条指令,用来恢复返回地址。

注:RETI必须是中断服务程序的最后一条指令,用来恢复断点地址,并使内部不可用户寻址的“优先级状态触发器”(见3.2.2节)清零,以便后续的同级或低级的中断请求得以响应。

4.NOP空操作指令

能产生一个指令周期的时延,常与双字节和三字节指令结合作程序抗错位干扰之用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈