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
這兩個函式分別執行有號與無號除法。條件旗標不受影響。