5. Aritmetiska instruktioner¶
5.1. Dokumentkonventioner¶
Notation: Rd, Rm, Rn betecknar ARM-register R0-R7. immN betecknar ett omedelbart värde med en bredd av N bitar, t.ex. imm8, imm3. carry betecknar carry-villkorsflaggan, not(carry) betecknar dess komplement. När det gäller instruktioner med fler än ett registerargument är det tillåtet att några är identiska. Till exempel kommer följande att addera innehållet i R0 till sig självt och placera resultatet i R0:
add(r0, r0, r0)
Aritmetiska instruktioner påverkar villkorsflaggorna utom där annat anges.
5.2. Addition¶
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. Subtraktion¶
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. Negation¶
neg(Rd, Rn)
Rd = -Rn
5.5. Multiplikation och division¶
mul(Rd, Rn)
Rd = Rd * Rn
Detta ger ett 32-bitarsresultat där överflödet går förlorat. Resultatet kan behandlas som signerat eller osignerat beroende på definitionen av operanderna.
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
Dessa funktioner utför signerad respektive osignerad division. Villkorsflaggorna påverkas inte.