5. Aritmetiska instruktioner

5.1. Dokumentkonventioner

Notation: Rd, Rm, Rn betecknar ARM-register R0-R7. immN betecknar ett omedelbart värde med en bredd av N bitar, t.ex. imm8, imm3. carry betecknar carry-villkorsflaggan, not(carry) betecknar dess komplement. När det gäller instruktioner med fler än ett registerargument är det tillåtet att några är identiska. Till exempel kommer följande att addera innehållet i R0 till sig självt och placera resultatet i R0:

  • add(r0, r0, r0)

Aritmetiska instruktioner påverkar villkorsflaggorna utom där annat anges.

5.2. Addition

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

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

  • neg(Rd, Rn) Rd = -Rn

5.5. Multiplikation och division

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

Detta ger ett 32-bitarsresultat där överflödet går förlorat. Resultatet kan behandlas som signerat eller osignerat beroende på definitionen av operanderna.

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

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

Dessa funktioner utför signerad respektive osignerad division. Villkorsflaggorna påverkas inte.