5. Instrucțiuni aritmetice¶
5.1. Convenții ale documentului¶
Notație: Rd, Rm, Rn denotă registrele ARM R0-R7. immN denotă o valoare imediată având o lățime de N biți, de exemplu imm8, imm3. carry denotă indicatorul de condiție de transport, not(carry) denotă complementul acestuia. În cazul instrucțiunilor cu mai mult de un argument de tip registru, este permis ca unele să fie identice. De exemplu, următoarea instrucțiune va aduna conținutul lui R0 la sine însuși, plasând rezultatul în R0:
add(r0, r0, r0)
Instrucțiunile aritmetice afectează indicatorii de condiție, cu excepția cazurilor în care se specifică altfel.
5.2. Adunare¶
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. Scădere¶
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. Negare¶
neg(Rd, Rn)
Rd = -Rn
5.5. Înmulțire și împărțire¶
mul(Rd, Rn)
Rd = Rd * Rn
Aceasta produce un rezultat pe 32 de biți, cu pierderea depășirii (overflow). Rezultatul poate fi tratat ca cu semn sau fără semn în funcție de definiția operanzilor.
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
Aceste funcții efectuează împărțirea cu semn și, respectiv, fără semn. Indicatorii de condiție nu sunt afectați.