5. Aritmetické instrukce¶
5.1. Konvence dokumentu¶
Notace: Rd, Rm, Rn označují registry ARM R0-R7. immN označuje bezprostřední hodnotu o šířce N bitů, např. imm8, imm3. carry označuje příznak přenosu, not(carry) označuje jeho doplněk. U instrukcí s více než jedním registrovým argumentem je přípustné, aby některé byly shodné. Například následující instrukce přičte obsah R0 k sobě samému a výsledek umístí do R0:
add(r0, r0, r0)
Aritmetické instrukce ovlivňují příznaky stavu, pokud není uvedeno jinak.
5.2. Sčítání¶
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. Odčítání¶
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. Negace¶
neg(Rd, Rn)
Rd = -Rn
5.5. Násobení a dělení¶
mul(Rd, Rn)
Rd = Rd * Rn
Toto produkuje 32bitový výsledek se ztrátou přetečení. Výsledek může být považován za znaménkový nebo bezznaménkový podle definice operandů.
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
Tyto funkce provádějí znaménkové, respektive bezznaménkové dělení. Příznaky stavu nejsou ovlivněny.