第十讲 控制转移类指令 教学方法: 讲授法 教学 教学目的: 1、了解控制转移类指令的种类 2、掌握无条件转移指令的特点及应用 3、掌握调用指令的特点及应用 教学重点: 各类指令操作功能 教学难点: 循环、移位指令 教学环节 组织教学:(2分钟)检查学生人数,强调作业要求。 复习旧课:逻辑操作指令,单字节:CLR,CPL,RL,RLC,RR,RRC 双字节:ANL,ORL,XRL。 讲授新课: §3-5 控制转移类指令 作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。 一、无条件转移指令 LJMP addr16 AJMP addr11 SJMP rel JMP @A + DPTR LJMP addr16 ;长跳转 转移目的地址 addr16 (PC);0000H ~ FFFFH,64KB AJMP addr11 ;绝对转移 转移目的地址的形成: 先(PC) (PC)+ 2; 后 PC15 ~ 11不变,PC10 ~ 0 addr10 ~ 0 64KB = 216 =25×211 = 32×2KB 转移目的地址与(PC)+ 2在同一个2KB范围内。 SJMP rel ;短转移,相对寻址。 转移目的地址 = (PC)+ 2 + rel, 所以 rel = 转移目的地址-(PC)-2 但,实际使用中常写成 SJMP addr16,汇编时会自动转换出rel。 JMP @A + DPTR ;间接转移,散转移指令。 转移目的地址 = (@A) + (DPTR) 本指令不影响标志位,不改变 @ A 及DPTR中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。 例1、设A中为键值,试编写按键值处理相应事件的程序段。 解: MOV DPTR,#KYEG MOV B,#03H MUL AB JMP @A + DPTR · KYEG:LJMP KYEG0 LJMP KYEG1 · 画图比较LJMP、AJMP、SJMP、JMP转移的起点和范围。 二、调用指令 LCALL addr16 ;长调用 ACALL addr11 ;绝对调用 LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程: (PC) (PC) + 3 (SP) (SP)+ 1 ((SP)) (PC7 ~ 0), 保护断点地址低字节; (SP) (SP)+ 2 ((SP)) (PC15 ~ 8),保存断点地址高字节; (PC) addr16 ,目的地址送PC,转子程序。 例2、设(SP)= 07H,(PC)= 2100H,子程序首地址为3456H,执行: LCALL 3456H MOV A,20H ······ 画出执行过程示意图。 执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H,(PC)= 3456H ACALL addr11 ; 转移范围与(PC)+ 2在同一个2KB内。不影响任何标志位,执行中机器自动完成下列过程: (PC) (PC)+ 2 (SP) (SP)+ 1 ((SP)) (PC7 ~ 0) (SP) (SP)+ 2 ((SP)) (PC15 ~ 8) (PC10 ~ 0) addr10 ~ 0 三、返回指令 从子程序返回主程序。 RET ;调用子程序返回; RETI ;中断子程序返回。 画图比较两种返回指令含义上的异同点,结论:RET返回地址事先已知,而 RETI的返回地址在程序执行中产生的,不固定。 不影响标志位,但PSW不能恢复到中断前的状态。 其机器自动操作过程如下: (PC15 ~ 8) ((SP)) (SP) (SP)- 1 (PC7 ~ 0) ((SP)) (SP) (SP)- 2 例3、设(SP)= 0BH,(0AH)= 23H,(0BH)= 01H 执行: RET 结果;(SP)= 09H,(PC)= 0123H(返回主程序) 空操作指令 NOP ;空操作 不执行任何操作,仅仅使(PC)+ 1,继续执行下条指令,不影响标志位, 在ROM中占一个字节。用于延时调整。 小结: 1、长转移与长调用指令有何区别? 2、长转移、短转移及相对转移的跳转范围有什么不同? 作业:P96 3.4 3.5 版书设计 一、无条件转移指令 1、…. 2、……. 3、 二、调用指令 1、…….. 2、……..   三、返回指令 1、…….. 2、…….. 小结: 1、…….. 2、……. .作业: