5. Aritmetikai utasítások

5.1. Dokumentumkonvenciók

Jelölés: Rd, Rm, Rn az R0-R7 ARM-regisztereket jelöli. Az immN egy N bit szélességű azonnali értéket jelöl, pl. imm8, imm3. A carry az átviteli feltételjelzőt jelöli, a not(carry) annak komplementerét. Több regiszter-argumentummal rendelkező utasítások esetén megengedett, hogy némelyik azonos legyen. Például az alábbi hozzáadja az R0 tartalmát önmagához, az eredményt R0-ba helyezve:

  • add(r0, r0, r0)

Az aritmetikai utasítások befolyásolják a feltételjelzőket, kivéve ahol másképp van jelezve.

5.2. Összeadás

  • 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. Kivonás

  • 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áció

  • neg(Rd, Rn) Rd = -Rn

5.5. Szorzás és osztás

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

Ez egy 32 bites eredményt állít elő, a túlcsordulás elvész. Az eredmény az operandusok definíciójának megfelelően előjeles vagy előjel nélküli értékként kezelhető.

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

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

Ezek a függvények előjeles, illetve előjel nélküli osztást végeznek. A feltételjelzőket nem befolyásolják.