5. 算术指令

5.1. 文件约定

符号: Rd , Rm , Rn 表示ARM寄存器R0-R7。 immN 表示具有N位宽度的即时值,如 imm8imm3 等。 Carry 表示进位条件标志。 not(carry) 表示其补码。对于多于一个寄存器参数的指令,允许其相同。 例如,以下指令将把R0的内容添加到其自身,将结果置于R0中:

  • add(r0, r0, r0)

除特殊说明的情况外,算法指令将会影响条件标志。

5.2.

  • add(Rdn, imm8) Rdn = Rdn + imm8

  • add(Rd, Rn, imm3) Rd = Rn + imm3

  • add(Rd, Rn, Rm) Rd = Rn +Rm

  • adc(Rd, Rn) Rd = Rd + Rn + carry

5.3.

  • sub(Rdn, imm8) Rdn = Rdn - imm8

  • sub(Rd, Rn, imm3) Rd = Rn - imm3

  • sub(Rd, Rn, Rm) Rd = Rn - Rm

  • sbc(Rd, Rn) Rd = Rd - Rn - not(carry)

5.4. 取反

  • neg(Rd, Rn) Rd = -Rn

5.5. 乘和除

  • mul(Rd, Rn) Rd = Rd * Rn

这会产生一个溢出丢失的32位结果。结果可能将根据操作数的定义被视为有符号或无符号。

  • sdiv(Rd, Rn, Rm) Rd = Rn / Rm

  • udiv(Rd, Rn, Rm) Rd = Rn / Rm

这些函数分别执行有符号和无符号的除法。条件标志不受影响。