5. Aritmetické instrukce

5.1. Konvence dokumentu

Notace: Rd, Rm, Rn označují registry ARM R0-R7. immN označuje bezprostřední hodnotu o šířce N bitů, např. imm8, imm3. carry označuje příznak přenosu, not(carry) označuje jeho doplněk. U instrukcí s více než jedním registrovým argumentem je přípustné, aby některé byly shodné. Například následující instrukce přičte obsah R0 k sobě samému a výsledek umístí do R0:

  • add(r0, r0, r0)

Aritmetické instrukce ovlivňují příznaky stavu, pokud není uvedeno jinak.

5.2. Sčítání

  • 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. Odčítání

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

  • neg(Rd, Rn) Rd = -Rn

5.5. Násobení a dělení

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

Toto produkuje 32bitový výsledek se ztrátou přetečení. Výsledek může být považován za znaménkový nebo bezznaménkový podle definice operandů.

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

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

Tyto funkce provádějí znaménkové, respektive bezznaménkové dělení. Příznaky stavu nejsou ovlivněny.