一、ARM指令的格式和分类
经典ARM指令格式如下:
{} {S} ,
<> 为必选项,{}为可选项
为操作码,如ADD表示算术加操作指令
{} 决定指令执行条件域
{S} 决定指令执行是否影响CPSR寄存器的值
为目的寄存器
的第一个操作数为寄存器
为第二个操作数
二、ARM指令条件执行及标志位
ARM指令可以通过添加适当的条件码后缀来达到条件执行的目的
这样可以提高代码密度,减少分支跳转指令数目,提高性能。
默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位
CMP不需要增加 “S”就可改变相应的标志位。
使用条件码可以实现高效的逻辑操作,节省跳转和条件语句,提高代码效率
如果指令不标明条件码,将默认为无条件(AL)执行。
条件码表
三、跳转指令
跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序的跳转,一种是使用跳转指令直接跳转,另一种是直接向PC寄存器赋值实现跳转。
B{条件} 目标地址
B指令最简单的跳转指令,一旦遇到一个B指令,ARM处理器立即跳转至给定的目标地址,由此处继续执行。跳转指令B限制在当前指令的土32MB范围内
BL{条件} 目标地址
BL是一另个跳转指令,在跳转前会将下一条指令的地址复制到R14中,然后跳转到指定的地址运行程序。可以通过将R14的内容重新加载到PC中,并返回到跳转指令之后的那个指令处执行。 BL是实现子程序调用的一个基本但常用的手段。
BLX{条件} 目标地址
BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由ARM状态切换到Thumb状态,该指令同时将PC的当前内容到寄存器R14中。当程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现程序的调用和处理器工作状态的切换。子程序的返回可以通过将寄存器R14复制到PC中来完成。
BX{条件} 目标地址
BX指令是带状态切换的跳转指令,跳转