5. Istruzioni aritmetiche¶
5.1. Convenzioni del documento¶
Notazione: Rd, Rm, Rn indicano i registri ARM R0-R7. immN indica un valore immediato avente una larghezza di N bit, ad esempio imm8, imm3. carry indica il flag di condizione di riporto, not(carry) ne indica il complemento. Nel caso di istruzioni con più di un argomento registro, è ammesso che alcuni siano identici. Ad esempio, quanto segue sommerà il contenuto di R0 a se stesso, ponendo il risultato in R0:
add(r0, r0, r0)
Le istruzioni aritmetiche influenzano i flag di condizione, tranne dove indicato.
5.2. Addizione¶
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. Sottrazione¶
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. Negazione¶
neg(Rd, Rn)
Rd = -Rn
5.5. Moltiplicazione e divisione¶
mul(Rd, Rn)
Rd = Rd * Rn
Questo produce un risultato a 32 bit con perdita dell’overflow. Il risultato può essere trattato come con segno o senza segno a seconda della definizione degli operandi.
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
Queste funzioni eseguono rispettivamente la divisione con segno e senza segno. I flag di condizione non vengono influenzati.