5. Aritmetik komutlar

5.1. Belge kuralları

Gösterim: Rd, Rm, Rn R0-R7 ARM yazmaçlarını belirtir. immN, N bit genişliğinde bir ani (immediate) değeri belirtir, örneğin imm8, imm3. carry elde koşul bayrağını, not(carry) ise onun tümleyenini belirtir. Birden fazla yazmaç argümanı olan komutlarda, bazılarının aynı olması caizdir. Örneğin aşağıdaki, R0’ın içeriğini kendisine ekleyecek ve sonucu R0’a yerleştirecektir:

  • add(r0, r0, r0)

Aritmetik komutlar, belirtilen durumlar dışında koşul bayraklarını etkiler.

5.2. Toplama

  • 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. Çıkarma

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

  • neg(Rd, Rn) Rd = -Rn

5.5. Çarpma ve bölme

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

Bu, taşmanın kaybedildiği 32 bitlik bir sonuç üretir. Sonuç, işlenenlerin tanımına göre işaretli veya işaretsiz olarak ele alınabilir.

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

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

Bu fonksiyonlar sırasıyla işaretli ve işaretsiz bölme gerçekleştirir. Koşul bayrakları etkilenmez.