从零开始学ARM
上QQ阅读APP看书,第一时间看更新

3.1 ARM指令格式

ARM指令助记符表示如下。

<opcode> {<cond>} {S} <Rd>, <Rn>, <shift_op2>

每个域的含义如下。

(1)<opcode>:操作码域。作为指令编码的助记符。

(2){<cond>}:条件码域,指令允许执行的条件编码,大括号表示此项可缺省。

ARM指令的一个重要特点是其可以条件执行,每条ARM指令的条件码域包含4位条件码,共16种。绝大多数指令根据CPSR中条件码的状态和条件码域的设置条件执行。当执行条件满足时,指令被执行,否则被忽略。ARM指令条件码如表3-1所示。

表3-1 ARM指令条件码

续表

每种条件码可用两个字符表示,这两个字符可以作为助记符后缀添加在指令的后面和指令同时使用。

例如,跳转指令“b”可以加上后缀“eq”变为“beq”,表示“相等则跳转”,即当CPSR中的Z标志位置位时发生跳转。

(3){S}:条件码设置域。这是一个可选项,当设置该域时,指令执行的结果将会影响程序状态寄存器CPSR中相应的状态标志。示例如下。

add r0,r1,r2;将R1与R2的和存放到R0中,不影响程序状态寄存器。
adds r0,r1,r2;执行加法,影响程序状态寄存器。

指令中比较特殊的是指令CMP,它不需要加“s”后缀就默认根据计算结果更改CPRS。

(4)<Rd>:目的操作数。ARM指令中的目的操作数总是一个寄存器。即使<Rd>与第一操作数寄存器<Rn>相同,此处也必须要指明,不能缺省。

(5)<Rn>:第一操作数。ARM指令中的第一操作数也必须是个寄存器。

(6)<shift_op2>:第二操作数。第二操作数可以是寄存器、内存存储单元或立即数。