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
Ці функції виконують ділення зі знаком та без знаку відповідно. Прапорці умов не змінюються.