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 + imm8add(Rd, Rn, imm3)
Rd = Rn + imm3add(Rd, Rn, Rm)
Rd = Rn + Rmadc(Rd, Rn)
Rd = Rd + Rn + carry
5.3. Kivonás¶
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. 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 / Rmudiv(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.