|
1. B
分支指令。这是Thumb指令集中惟一可以条件执行的指令。
句法
B{cond}lable
B lable
其中:lable是程序相对偏移表达式。通常是在同一代码内的标号。若使用cond,则lable必须在当前指令的-256~+256字节范围内;若指令是无条件的,则lable必须在±2KB范围内。
用法
若cond满足或不使用cond,则B指令引起处理器转移到lable,lable必须在指定范围内。ARM链接器不能增加代码来产生更长的转移。
例子
B loop
BLT sectB
2. BL
带链接的长分支
句法
BL lable
其中:lable为程序相对转移表达式。
用法
BL指令将下一条指令的地址拷贝到R14,并引起处理器转移到lable。BL指令不能转移到当前指令±4MB以外的地址。必要时,ARM链接器插入代码以允许更长的转移。
例子
BL subC
1. BX
分支指令,并可有选择地切换指令集
句法
BX Rm
其中:Rm装有分支目的地址的ARM寄存器。Rm的位[0]不用地址部分。若Rm的位[0]清0.则位[1]也必须清0(因为在ARM状态下,地址是字对齐的,所以最后2位必须为00);指令清除CPSR中的标志T,目的地址的代码被解释为ARM代码。
用法
BX指令引起处理器转移到Rm存储的地址。若Rm的位[0]置位,则指令集切换到Thumb状态。若Rm的位[0]置0,则指令集切换到ARM状态。
例子
MOV R7,to_Thumb+1
BX R7 ;R7的位[0]被置为1,所以指令集切换到Thumb状态。
BLX
带链接分支,并可有选择地交换指令集。
句法
BLX Rm
BLX lable
其中:Rm装有分支目的地址的ARM寄存器。Rm的位[0]不用于地址部分。若Rm的位[0]清0,则位[1]也必须清0;指令清除CPSR中的标志T,目的地址的代码被解释为ARM代码。Lable是程序相对偏移表达式。“BLX lable”始终引起处理器切换到ARM状态。
用法
BLX指令可用于:
拷贝下一条指令的地址到R14;
引起处理器转移到lable或Rm存储的地址;
如果Rm的位[0]清0,或使用“BLX lable”形式,则指令集切换到ARM状态。
例子
BLX R2
BLX R0
BLX armsub
指令不能转移到当前指令±4MB范围以外的地址。必要时,ARM链接器插入代码以允许更长的转移。这条代码的作用就是使Thumb采用2条BLX指令组合成22位的半字偏移,最终使得指令范围为±4MB。
注意:BLX指令只有V5T结构的ARM微处理器支持。
子程序调用及返回
在ARM和Thumb状态下,通常用BL指令来调用子程序。在不同的情况下有不同的返回方法,如下所述:
如果子程序由相同的指令集调用,则它可用传统的BL调用,用“MOV PC,R
凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网