马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
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,R14”或“LDMFD SP!,{…,PC}”返回。如果子程序由不相同的指令集调用,则可用“BX LR”或“LDMFD SP!,{…,rN};BX rN”返回。支持V5T的结构的ARM微处理器也可用“LDMFD SP!,{… ,PC}”返回,因为这些指令采用装载的PC值的最低位来更新Thumb标志位。早于V5T结构的微处理器不支持这样的用法。 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |