新闻  |   论坛  |   博客  |   在线研讨会
程序控制指令
tongxin | 2009-05-18 12:41:11    阅读:2111   发布文章

表 3-6 程序控制指令1. 程序控制指令的一般性说明* 程序控制指令又分“无条件转移”、“调用与返回”和“条件转移”等三类。* 对程序控制指令应掌握:转移地址如何生成及其转移范围。* 注意!MCS-51条件转移指令的运用与计算并无特别的联系。* 位值判别转移使程序设计更为灵活,是MCS-51指令系统的特色。* 应特别注意变址转移指令JMP与比较转移指令CJNE的用法。操作码操作数条 件转 移 地 址说 明AJMPaddr11无条件(PC)←(PC)+2(PC)0-10←addr11 短转移,只改变PC的低11位,转移范围2K。LJMPaddr16无条件(PC)←addr16长转移,转移范围全64K空间SJMPrel无条件(PC)←(PC)+2+rel相对转移 ,范围-126~+129。JMP@A+DPTR无条件(PC)←(A)+(DPTR)散转指令,根据A值变址转移ACALLaddr11 无条件(PC)←(PC)+ 2(PC)L、(PC)H压栈(PC)0-10←addr11 短调用,只改变PC的低11位,转移范围2K。LCALLaddr16无条件(PC)←(PC)+ 3(PC)L、(PC)H压栈(PC)←addr16长调用,调用范围全64K空间RET隐含((SP))无条件(PC)H←((SP))(PC)L←((SP)-1))子程序返回。 RETI中断返回。JZrel(A)= 0(PC)←(PC)+2+rel根据A的值条件转移。JNZ(A)≠0JCrel(C)= 0(PC)←(PC)+2+rel根据C的值条件转移。JNC(C)= 1JNBbit, rel(bit)=0(PC)←(PC)+3+rel位值判别转移。(负逻辑)JB(bit)=1位值判别转移。(正逻辑)JBC(bit)=1同 JB ,加(bit)清零功能。DJNZRn, rel(Rn)-1≠0(PC)←(PC)+2+rel循环指令。循环计数器自动减1,归0则退出循环。dir, rel(dir)-1≠0(PC)←(PC)+3+rel操作码操作数条 件转 移 地 址说 明CJNEA,dir,relA,#data,rel Rn,#data,rel@Ri,#data,rel(A)≠(direct)(A)≠#data(Rn)≠#data((Ri))≠#data(PC)←(PC)+3+rel按无符号数比较,两数不等则转移。若前一数小,C置1;若前一数不小于后一数,C清零。NOP无无(PC)←(PC)+1空操作,顺序执行。2. AJMP、LJMP及SJMP的转移范围指令转移地址转移范围说明AJMP addr11(PC)+2的高5位+ addr11(PC)+2所在的2k页2k页:X000H~X7FFHX800H~XFFFHLJMP addr16addr16全64k空间SJMP rel(PC)+2+rel(PC)-126~(PC)+129Rel是8位有符号数注:①表中的(PC)是转移指令的地址。②在实际使用时,地址一般用标号表示。3. 变址转移指令JMP的使用* JMP的转移地址 = 基址(DPTR)+变址偏移量(A)。* 应用例:按照(A)= 0,1,2,分别转向三个不同的程序分支。MOV DPTR,#GO ;设立散转入口地址MOV B A, ;RL A ; (A) ←(A)+3ADD A,B ;JMP @A+DPTRGO: LJMP GO1 ;指令地址为GOLJMP GO2 ;指令地址为GO+3LJMP GO3 ;指令地址为GO+6* 问题一:上例中,如果由LJMP改用AJMP,程序应如何变化?* 问题二:上例中,如果A的值大于2会如何?怎样解决?4. 条件转移指令的使用* 因为A与C的值并不一定由计算操作而改变,故JZ、JNZ、JC、JNC等指令的运用与计算并无特别的联系,* 位值判别转移指令使条件转移的功能更丰富和灵活。例如:* 如果(B)³0,转向POS分支:JNB B.7,POS* 如果计算溢出,转向FL分支: JB OV,FL* 如果C=1,将C清零并转向NEG分支:JBC C,NEG* 由P1.4检测火灾传感器,1有效。传感器报警时转向FIRE分支:JB P1.4,FIRE 5. 比较转移指令CJNE及其使用* 格式:CJNE 前数,后数,相对偏移量转移条件:前数≠后数对C的影响:按无符号数减法。前数减后数,有借位C = 1,否则C = 0。* 应用例:A、B中为无符号数,比较两数,大数存A,小数存B。CJNE A,B,0 JNC DONEEXC A,BDONE:…… * 应用例:A、B中为有符号数,比较两数,大数存A,小数存B。有符号数比较的算法:以A 与B 表示A与B的无符号值。对于A >B 有,若A>0 A>BA<0 A据此可以画出右边的流程图,相应的程序如下CJNE A,B,NEQSJMP DONENEQ:JNC AGTXCH A,BAGT:JNB Acc.7,DONEXCH A,BDONE:…… 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客