5. 算术说明

5.1. 文档约定

符号:表示ARM寄存器R0-R7。表示具有 N 位宽度的立即数,例如,。表示进位条件标志,表示其补码。在具有多个寄存器参数的指令的情况下,允许某些指令相同。例如,以下内容会将 R0 的内容添加到自身,将结果放入 R0: Rd, Rm, Rn immN imm8, imm3. carrynot(carry)

  • 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

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