上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>:第二操作数。第二操作数可以是寄存器、内存存储单元或立即数。