您的位置:控制工程论坛网论坛 » 教程与手册 » 程序控制指令

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

程序控制指令

xilinxue  发表于 2008/9/25 11:05:16      536 查看 0 回复  [上一主题]  [下一主题]

手机阅读



表 3-6  程序控制指令


 


1. 程序控制指令的一般性说明


 


*      程序控制指令又分“无条件转移”、“调用与返回”和“条件转移”等三类。


*      对程序控制指令应掌握:转移地址如何生成及其转移范围。


*      注意!MCS-51条件转移指令的运用与计算并无特别的联系。


*      位值判别转移使程序设计更为灵活,是MCS-51指令系统的特色。


*      应特别注意变址转移指令JMP与比较转移指令CJNE的用法。





























































































































操作码


操作数


条 件


转 移 地 址


说        明


 

AJMP

 


 addr11


 


无条件


(PC)←(PC)+2


(PC)0-10←addr11


短转移,只改变PC的低11位,转移范围2K。


LJMP

addr16

无条件


(PC)←addr16


长转移,转移范围全64K空间

SJMP

rel


无条件


(PC)←(PC)+2+rel


相对转移 ,范围-126~+129。


JMP


@A+DPTR


无条件


(PC)←(A)+(DPTR)


散转指令,根据A值变址转移


 


ACALL


 


addr11


 


无条件


(PC)←(PC)+ 2


(PC)L、(PC)H压栈


(PC)0-10←addr11


短调用,只改变PC的低11位,转移范围2K。

LCALL

addr16


无条件


(PC)←(PC)+ 3


(PC)L、(PC)H压栈


(PC)←addr16


长调用,调用范围全64K空间


RET


隐含


((SP))


 


无条件


(PC)H←((SP))


(PC)L←((SP)-1))


 子程序返回。


RETI


 中断返回。

JZ

 


rel


(A)= 0


 


(PC)←(PC)+2+rel


 


 根据A的值条件转移。


JNZ


(A)≠0


JC


 


rel


(C)= 0


 


(PC)←(PC)+2+rel


 


 根据C的值条件转移。


JNC


(C)= 1


JNB


 


bit, rel


 


(bit)=0


 


(PC)←(PC)+3+rel


 


 位值判别转移。(负逻辑)


JB


(bit)=1


 位值判别转移。(正逻辑)


JBC


(bit)=1


 同 JB ,加(bit)清零功能。


 


DJNZ


 Rn, rel


(Rn)-1≠0


(PC)←(PC)+2+rel


 循环指令。循环计数器自动


 减1,归0则退出循环。


dir, rel


(dir)-1≠0


(PC)←(PC)+3+rel


操作码


 


操作数


 


条   件


 


转 移 地 址


 


说        明


 


 


CJNE


 


A,dir,rel


A,#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~X7FFH


      X800H~XFFFH


LJMP addr16


addr16


全64k空间


 


SJMP rel


(PC)+2+rel


(PC)-126~(PC)+129


Rel是8位有符号数


注:①表中的(PC)是转移指令的地址。


    ②在实际使用时,地址一般用标号表示。


 


3. 变址转移指令JMP的使用


*      JMP的转移地址 = 基址(DPTR)+变址偏移量(A)。


*      应用例:按照(A)= 0,1,2,分别转向三个不同的程序分支。


MOV  DPTR,#GO  ;设立散转入口地址


点此在新窗口浏览图片javascript:window.open(this.src);" border="0"/>MOV  B A,       ;


RL   A            ;    (A) ←(A)+3


ADD  A,B        ;


JMP  @A+DPTR


GO: LJMP  GO1         ;指令地址为GO


LJMP  GO2         ;指令地址为GO+3


LJMP  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


*      可以在http://www.51hei.com 单片机教程 首页找更多资料哦


 


5.      比较转移指令CJNE及其使用


*      格式:CJNE  前数,后数,相对偏移量


转移条件:前数≠后数


对C的影响:按无符号数减法。前数减后数,有借位C = 1,否则C = 0。


 


*      应用例:A、B中为无符号数,比较两数,大数存A,小数存B。


CJNE  A,B,0 


JNC  DONE


EXC  A,B


DONE:……


转载须保留地址:http://www.51hei.com/mcu/284.html


 


*      应用例:A、B中为有符号数,比较两数,大数存A,小数存B。


有符号数比较的算法:


以A 与B 表示A与B的无符号值。


对于A >B 有,若A>0 A>BA<0 A<B


点此在新窗口浏览图片javascript:window.open(this.src);" border="0"/>据此可以画出右边的流程图,相应的程序如下


 


CJNE  A,B,NEQ


SJMP  DONE


NEQ:JNC   AGT


XCH  A,B


AGT:JNB  Acc.7,DONE


XCH  A,B


DONE:……




1楼 0 0 回复