3-5 程序转移类指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无条件转移指令跳转范围比较
二 有条件控制转移指令
1. 累加器A判零转移指令
JZ JNZ rel rel ;累加器为0转移,否则继续执行 ;累加器不为0转移,否则继续执行
例1 将内部RAM单元中起始地址为20H的数据传送到P1口,当 RAM单元中内容为0时,不传送,接着传送下一单元内容。
(P C) (P C)+2 Y (P C) (P C)+rel
循环程序段
(PC)
(PC)+2 或 3 (PC) N (PC)+rel
(字节)=0? Y
DJNZ指令的操作过程示意

子程序调用及返回
为简化程序设计,经常把功能完全相同或反复使用的程序段 单独编写成子程序,供主程序调用。主程序需要时通过调用指令, 无条件转移到子程序处执行,子程序结束时执行返回指令,再返 回到主程序继续执行。
(源字节) (目的字节)
CJNE A, #data, rel
比较
CJNE Rn, #data, rel
二者相等? N
CJNE @Ri, #data, rel
Y
(P C) (P C)+rel 源 < 目 , (C) 0 源 > 目 , (C) 1
CJNE 指令的执行过程
3.
循环减1判0 转移指令
3. 返回指令
指令格式:
RET
(PC8~15 ) ((SP)) (SP) (SP) 1 ; (PC0~7 ) ((SP)) (SP) (SP) 1
4. 中断返回指令
指令格式:
RETI
该指令用于中断返回。执行过程类似于RET。 RET与RETI指令应分别放在子程序和中断服务程序的最后。
1. 长调用指令
指令格式
LCALL
addr16
(PC) (PC)+3 (SP) (SP)+1 ((SP)) (PC0~7 ) ; (SP) (SP)+1 ((SP)) (PC8~15 ) (PC) addr0~15
2. 绝对调用指令
指令格式:
(PC) (PC) 2 (SP) (SP) 1 ((SP)) (PC 0~7 ) addr11 ; (SP) (SP) 1 ((SP)) (PC ) 8~15 (PC0~10 ) addr0~10 (PC11~15 )不变
ACALL
(P C)
(P C)+2 Y (P C) (P C)+rel
A=0? N
A≠0? N
(a) JZ rel
(b) JNZ rel
累加器A判零转移指令的执行过程
2.
比较转移指令
指令格式: CJNE <目的操作数>, <源操作数>, rel
(P C) (P C)+3
CJNE A, direct, rel
3-5 程序转移类指令

无条件转移指令
1. 长转移指令 指令格式: LJMP addr16
例1 执行下述程序段: M: LJMP DL1 DL1: …
;(PC)←addr0~15
2. 绝对转移指令 指令格式:
AJMP
addr11
(PC) (PC) 2 ; (PC0~10 ) addr0~10 (PC )不变 11~15
Leabharlann Baidu
指令格式: DJNZ Rn , rel DJNZ direct, rel
例2 在程序中,可以利用DJNZ指 令实现软件延时。当晶振频率一 定时,则延时的大小可根据程序 的需要从几个微秒到几百微秒, 甚至毫秒、秒等不同要求来设定。 下面是一段当系统晶振频率为 12MHz时,在P1.0口输出周期为1 毫秒脉冲的延时程序。 K2: MOV R1,#2 MOV R2, #250 K1: DJNZ R2, K1 DJNZ R1, K1 CPL P1.0 SJMP K2
5. 空操作指令
指令格式:
NOP
;(PC)←(PC)+1
3. 相对短转移指令 指令格式:
SJMP rel (PC) (PC) 2 ; (PC) (PC) rel
4. 间接转移指令 JMP @A+DPTR
;(PC)←(A)+(DPTR)
-128
P C+2
AJMP 2K
LJMP
64K
LJMP
P C JMP @A+DP TR P C+2 +127 DP TR 256
相关文档
最新文档