飞思卡尔程序控制指令:相对转移指令控制程序作相对于当前程序计数器PC的跳转。以B(BRACH)开头的转移指令,其跳转偏移量为单字节,在一128一+1 27之间。若超出这一范围,要使用长转移指令(Long Brach),偏移量可以达到28,覆盖64KB空间,相应短转移指令前加L即转换为长转移指令,例如BRA变为LBRA。以下将列出各类转移指令。
1)无条件转移
BRA Brach Always
BRN Branch Never
LBRA Long Brach Always
LBRN Long Branch Never
JMP Jump to absolute address
2)条件转移指令
BCC Branch if Carry Clear C=0
BCS Branch if Carry Set C=1
BEQ Branch if Equal Z=1
BMI Branch if Minus N=l
BNE Branch if Not Equal Z=0
BPL Branch if Plus N=0
BVC Branch if ovsrflow V Clear V=0
BVS Branch if V Set V=1
IIHI Branch if Higher Result=M C+Z=0
DBNZA Decrement and Branch if Not Zero Z=0
DRN7X Decrement and BranCh if Not Zero Z=0
在查询等程序中,则需要用到这些指令。
[例题l]
LOOPl:LDA PTBD
AND#%11001100
CBEQA #$CC,LOOPl
程序注释:不断查询PB口,当PB 口的第2、3、6、7位不同时为“l”时,则跳出循环,顺序执行以下的程序,否则,转移至LOOPl处执行。
[例题2]
DBNZX水
注释:x寄存器的值先减l,然后判断x是否为O,不为。则重复执行这条指令,否则往下顺序执行,这在延时子程序中很常用。
3)跳转与子程序调用指令
JSR Jump to Subroutine
BSR Branch to Subroutine
RTS Return from Subroutine
RTI Return from Interrupt
注意:绝对调用和相对调用的区别是绝对跳转或绝对调用指向某绝对地址,相对跳转和相对调用是通过程序计数器PC当前值加偏移量算出转移地址,便于生成和装载与地址无关的浮动代码,故可能的情况下尽量使用相对转移或相对调用指令。RTS与RTI区别:二者适用场合不同,RTS用于子程序返回,而RTI用于中断返回。
更多精彩请您关注: