5. Instrucciones aritméticas

5.1. Convenciones del documento

Notación: Rd, Rm, Rn denotan los registros ARM R0-R7. immN denota un valor inmediato con una anchura de N bits, p. ej. imm8, imm3. carry denota el indicador de condición de acarreo, not(carry) denota su complemento. En el caso de instrucciones con más de un argumento de registro, se permite que algunos sean idénticos. Por ejemplo, lo siguiente sumará el contenido de R0 a sí mismo, colocando el resultado en R0:

  • add(r0, r0, r0)

Las instrucciones aritméticas afectan a los indicadores de condición excepto donde se indique.

5.2. Suma

  • 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. Resta

  • 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. Negación

  • neg(Rd, Rn) Rd = -Rn

5.5. Multiplicación y división

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

Esto produce un resultado de 32 bits perdiéndose el desbordamiento. El resultado puede tratarse como con signo o sin signo según la definición de los operandos.

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

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

Estas funciones realizan la división con signo y sin signo respectivamente. Los indicadores de condición no se ven afectados.