ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM微处理器的指令集是加载(Load)/存储(Store)型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
在ARM内部,所有ARM指令都是32位操作数,短的数据类型只有在数据传送类型指令中才被支持。当一个字节数据被取出后,被扩展到32位,在内部数据处理时,作为32位的值进行处理,并且ARM指令以字为边界。所有Thumb指令都是16位指令,并且以两个字节为边界。ARM协处理器可以支持另外的数据类型,包括一套浮点数数据类型,ARM的核并没有明确的支持。
ARM微处理器的指令的分类与格式
ARM微处理器的指令集可分为数据处理指令、移位指令、乘法指令与乘加指令、批量数据加载/存储指令、跳转指令、程序状态寄存器(PSR)访问指令、加载/存储指令、协处理器指令和异常产生指令9大类,具体的指令及功能如表4.1所示(表中指令为基本ARM指令,不包括派生的ARM指令)。
指令的条件域
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。
每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。
在16种条件标志码中,只有15种可以使用