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 + imm8add(Rd, Rn, imm3)
Rd = Rn + imm3add(Rd, Rn, Rm)
Rd = Rn + Rmadc(Rd, Rn)
Rd = Rd + Rn + carry
5.3. Pengurangan¶
sub(Rdn, imm8)
Rdn = Rdn - imm8sub(Rd, Rn, imm3)
Rd = Rn - imm3sub(Rd, Rn, Rm)
Rd = Rn - Rmsbc(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 / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
Fungsi-fungsi ini melakukan pembagian bertanda tangan dan tidak bertanda tangan masing-masing. Flag kondisi tidak terpengaruh.