5. Instruksi aritmetika

5.1. Konvensi dokumen

Notasi: Rd, Rm, Rn menunjukkan register ARM R0-R7. immN menunjukkan nilai langsung yang memiliki lebar N bit, misalnya imm8, imm3. carry menunjukkan flag kondisi carry, not(carry) menunjukkan komplemen-nya. Dalam kasus instruksi dengan lebih dari satu argumen register, beberapa boleh identik. Misalnya berikut ini akan menambahkan isi R0 ke dirinya sendiri, menempatkan hasilnya di R0:

  • add(r0, r0, r0)

Instruksi aritmetika mempengaruhi flag kondisi kecuali dinyatakan sebaliknya.

5.2. Penjumlahan

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

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

  • neg(Rd, Rn) Rd = -Rn

5.5. Perkalian dan pembagian

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

Ini menghasilkan hasil 32 bit dengan overflow yang hilang. Hasilnya dapat diperlakukan sebagai bertanda tangan atau tidak bertanda tangan sesuai dengan definisi operand.

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

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

Fungsi-fungsi ini melakukan pembagian bertanda tangan dan tidak bertanda tangan masing-masing. Flag kondisi tidak terpengaruh.