5. Aritmeettiset käskyt

5.1. Dokumenttikäytännöt

Merkintätapa: Rd, Rm, Rn tarkoittavat ARM-rekistereitä R0-R7. immN tarkoittaa N bitin levyistä välitöntä arvoa, esim. imm8, imm3. carry tarkoittaa carry-ehtolippua, not(carry) tarkoittaa sen komplementtia. Käskyissä, joissa on useampi kuin yksi rekisteriargumentti, jotkin niistä saavat olla samoja. Esimerkiksi seuraava lisää R0:n sisällön itseensä ja sijoittaa tuloksen R0:aan:

  • add(r0, r0, r0)

Aritmeettiset käskyt vaikuttavat ehtolippuihin paitsi missä toisin mainitaan.

5.2. Yhteenlasku

  • 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. Vähennyslasku

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

  • neg(Rd, Rn) Rd = -Rn

5.5. Kerto- ja jakolasku

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

Tämä tuottaa 32-bittisen tuloksen, jonka ylivuoto menetetään. Tulos voidaan tulkita etumerkilliseksi tai etumerkittömäksi operandien määritelmän mukaisesti.

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

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

Nämä funktiot suorittavat etumerkillisen ja etumerkittömän jakolaskun vastaavasti. Ehtolippuihin ne eivät vaikuta.