5. 算術命令
5.1. この文書の表記規則
表記: Rd, Rm, Rn は ARM のレジスタ R0〜R7 を表します。 immN は幅 N ビットの即値を表します(例: imm8 、 imm3 )。 carry はキャリーの条件フラグを、 not(carry) はその補数を表します。レジスタ引数を複数取る命令では、そのいくつかが同一であっても構いません。たとえば次の例は、R0 の内容を自分自身に加算し、結果を R0 に格納します:
add(r0, r0, r0)
算術命令は、特に記載がない限り条件フラグに影響します。
5.2. 加算
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. 減算
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(Rd, Rn)
Rd = -Rn
5.5. 乗算と除算
mul(Rd, Rn)
Rd = Rd * Rn
これは 32 ビットの結果を生成し、あふれた分は失われます。結果は、オペランドの定義に応じて符号付きとしても符号なしとしても扱えます。
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
これらの関数は、それぞれ符号付き除算と符号なし除算を行います。条件フラグには影響しません。