飞思卡尔程序控制指令
发表:2023-08-29 12:01:23 阅读:116

飞思卡尔程序控制指令:相对转移指令控制程序作相对于当前程序计数器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用于中断返回。

 

更多精彩请您关注:

飞思卡尔数据传送指令

飞思卡尔数据和位操作指令

飞思卡尔逻辑运算指令

freescale代理