《四、控制转移类指.ppt》由会员分享,可在线阅读,更多相关《四、控制转移类指.ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、四、控制转移类指令四、控制转移类指令n控制转移类指令共有控制转移类指令共有17条条n无条件转移指令无条件转移指令n条件转移指令条件转移指令n子程序调用与返回指令子程序调用与返回指令n空操作指令空操作指令n这类指令通过修改这类指令通过修改PC的内容来控制程序的的内容来控制程序的执行过程执行过程1无条件转移指令n程序执行到该指令时,程序无条件转移到程序执行到该指令时,程序无条件转移到指令所提供地址处执行指令所提供地址处执行n共有共有4条条n长转移指令长转移指令n绝对转移指令绝对转移指令n短转移指令短转移指令n间接转移指令间接转移指令长转移指令nLJMPaddr16;(PC)addr16n目标地址的
2、选择范围为64K空间任意单元,该指令不影响标志位。n相对转移量可以用标号代替:nnLJMPLOOPnnLOOP:绝对转移指令nAJMPaddr11;n(PC)(PC)+2n(PC100)addr010n(PC1115)不变注:程序无条件转向同一注:程序无条件转向同一2K字节存储空间目标地字节存储空间目标地址执行址执行注:转移范围为注:转移范围为“同一同一2K”为为PC当前值所在的当前值所在的2K空间空间,而不是指令前后而不是指令前后2K空间空间n例:已知07FCH:AJMPL1,L1的地址为0802H,分析执行此指令后的PC值。n若07FEH:AJMPL1,L1的地址为0802H,分析执行此指
3、令后的PC值。短转移指令nSJMPrel;(PC)(PC)+2n(PC)(PC)+relnrel是一个有符号数偏移量,其范围为是一个有符号数偏移量,其范围为n-128+127,以以补补码码形形式式给给出出。正正数数表表示程序向前跳,负数表示向后跳。示程序向前跳,负数表示向后跳。n例:0123H单元存放着指令SJMP45H,则目标地址为0123H+2+45H=012AHn若指令为SJMPF2H,则目标地址为0123H+2-0EH=0116H一条带有一条带有FEH偏移量的偏移量的SJMP指令,将实现无限循指令,将实现无限循环环nPC:SJMPFEHnPC起始值+2-2=PC目的地址n例:4000H
4、:SJMPFEH间接转移指令nJMPA+DPTR;n(PC)(A)+(DPTR)JMP是一条多分支转移指令,由是一条多分支转移指令,由DPTR决定多分支转移指决定多分支转移指令的首地址,由累加器令的首地址,由累加器A来动态地选择转到某一分支来动态地选择转到某一分支n 例例 3-21某单片机应用系统有16个键,对应的键码值(00H0FH)存放在R7中,16个 键 处 理 程 序 的 入 口 地 址 分 别 为KYE0,KYE1,KYE15。要求按下某键,程序即转移到该键的相应处理程序执行。n MOV A,R7n RL A;键值键值2倍,倍,AJMP指令为双字节指令指令为双字节指令n MOV DP
5、TR,#KEYGn JMP A+DPTRn n KEYG:AJMP KEY0 nKEYG+2:AJMP KEY1 n nKEYG+30:AJMP KEY15 2条件转移指令n条件转移指令是当满足给定条件时,程序转移到目标地址去执行;条件不满足则顺序执行下一条指令n条件转移指令分为n累加器A判零转移指令n比较转移指令n循环转移指令n累加器A判零转移指令nJZrel;n(PC)(PC)+2n当(A)=0,(PC)=(PC)+rel;n当(A)0,程序顺序执行nJNZrel;n(PC)(PC)+2n当(A)0,则(PC)=(PC)+rel;n 当(A)=0,则程序顺序执行(2)比较转移指令n比较转移
6、指令能够实现三分支转移,它的格式为:比较转移指令能够实现三分支转移,它的格式为:n CJNE (目的字节),(源字节),目的字节),(源字节),reln目的字节和源字节进行比较目的字节和源字节进行比较n若它们的值不相等,则转移。转移的目标地址为若它们的值不相等,则转移。转移的目标地址为PC当当前值加偏移量(前值加偏移量(rel)若目的操作数减去源操作数,够减,则清进位标志位若目的操作数减去源操作数,够减,则清进位标志位Cy;若目的操作数减去源操作数,不够减,则置位进位标志位若目的操作数减去源操作数,不够减,则置位进位标志位Cy;n若二者相等,则顺序执行。若二者相等,则顺序执行。n本指令执行后不
7、影响任何操作数本指令执行后不影响任何操作数nCJNEA,direct,rel;n(PC)(PC)+3n若(direct)(A),(PC)(PC)+rel且Cy1n若(direct)=(A),顺序执行且Cy0nCJNEA,#data,rel;n(PC)(PC)+3n若data(A),(PC)(PC)+rel且Cy1;n若data=(A),顺序执行且Cy0nCJNERn,#data,rel;n(PC)(PC)+3n若data(Rn),(PC)(PC)+rel且Cy1;n若data=(Rn),顺序执行且Cy0nCJNERi,#data,rel;n(PC)(PC)+3n若data((Ri)),(PC)
8、(PC)+rel且Cy1;n若data=((Ri)),顺序执行且Cy0n例:MOVA,#40HnMOVR0,#10HnCJNER0,#20H,L1nnL1:JCL2;(CY)=1,转移;(CY)=0,顺序往下执行nADDA,#30HnL2:MOV50H,An问:执行此段程序后,50H单元内容是什么?(3)循环指令nDJNZRn,rel;n(PC)(PC)+2,(Rn)(Rn)-1;n当(Rn)0时,(PC)(PC)+rel;n当(Rn)=0时,程序顺序执行。nDJNZdirect,rel;n(PC)(PC)+3,(direct)(direct)-1n当(diect)0时,(PC)(PC)+re
9、l;n当(direct)=0时,程序顺序执行。n注:操作数的内容先减1再判零,不等于0时转移3子程序调用本指令完成两项操作:把PC当前值压入堆栈;把子程序入口地址送PC。n长调用指令LCALLaddr16;n(PC)(PC)+3n (SP)(SP)+1,(SP)(PC)70;n(SP)(SP)+1,(SP)(PC)158;nPC150addr16(2)绝对调用指令nACALL addr11;n(PC)(PC)+2,n(SP)(SP)+1,(SP)(PC)70;(SP)(SP)+1,(SP)(PC)158;nPC100addr116.返回指令n子程序返回指令nRET ;n(PC158)(SP),(SP)(SP)-1;n(PC70)(SP),(SP)(SP)-1;n用在子程序的末尾 中断返回指令中断返回指令nRETI ;n (PC158)(SP),(),(SP)(SP)-1;n (PC70)(SP),(),(SP)(SP)-1n用在中断服务程序的末尾nRETI与与RET指令区别:指令区别:RETI在返回的同时同时释放中断逻辑同时释放中断逻辑7.空操作指令nNOP ;(PC)(PC)+1n本指令不作任何操作,仅仅将程序计数器本指令不作任何操作,仅仅将程序计数器PC加加1,使程序继续向下执行。,使程序继续向下执行。n本指令为单周期指令本指令为单周期指令n常用于延时常用于延时
限制150内