B/BL:B{L}{}
程序跳转指令。
L指示是否将跳转返回地址存入R14_,如果省略则表示不存放跳转返回地址存入R14_。表示程序执行条件,如果省略则表示必然执行。表示跳转目的地址,通常由代码编写人员给定Label,由编译器自动产生。
CPU对应的动作:
if ConditionPassed(cond) then
if L == 1 then
LR = address of the instruction after the branch instruction
PC = PC + (SignExtend_30(signed_immed_24) << 2)
用法:
B指令直接指示PC跳转。BL指令指示PC跳转的同时,将程序返回地址保存到R14_,该指令通常用于子函数调用。当从子函数返回时,可直接将R14_内容复制到PC中。方法有如下几种:
1.BX R14_
2.MOV PC,R14_
3.在进入子函数时,将R14_压栈。当从子函数返回时,将栈顶(底)弹出给PC。如此则完成子函数调用,如下:
STMFD R13!,{,R14}
... ...
LDMFD R13!,{,PC}