5. Các lệnh số học

5.1. Quy ước tài liệu

Ký hiệu: Rd, Rm, Rn biểu thị các thanh ghi ARM R0-R7. immN biểu thị một giá trị tức thì có độ rộng N bit, ví dụ: imm8, imm3. carry biểu thị cờ điều kiện carry, not(carry) biểu thị phần bù của nó. Trong trường hợp các lệnh có nhiều hơn một đối số thanh ghi, một số có thể giống nhau. Ví dụ, lệnh sau sẽ cộng nội dung của R0 với chính nó, đặt kết quả vào R0:

  • add(r0, r0, r0)

Các lệnh số học ảnh hưởng đến các cờ điều kiện trừ khi có chú thích khác.

5.2. Phép cộng

  • add(Rdn, imm8) Rdn = Rdn + imm8

  • add(Rd, Rn, imm3) Rd = Rn + imm3

  • add(Rd, Rn, Rm) Rd = Rn + Rm

  • adc(Rd, Rn) Rd = Rd + Rn + carry

5.3. Phép trừ

  • sub(Rdn, imm8) Rdn = Rdn - imm8

  • sub(Rd, Rn, imm3) Rd = Rn - imm3

  • sub(Rd, Rn, Rm) Rd = Rn - Rm

  • sbc(Rd, Rn) Rd = Rd - Rn - not(carry)

5.4. Phép phủ định

  • neg(Rd, Rn) Rd = -Rn

5.5. Phép nhân và chia

  • mul(Rd, Rn) Rd = Rd * Rn

Lệnh này tạo ra kết quả 32 bit với phần tràn bị mất. Kết quả có thể được coi là có dấu hoặc không dấu tùy theo định nghĩa của các toán hạng.

  • sdiv(Rd, Rn, Rm) Rd = Rn / Rm

  • udiv(Rd, Rn, Rm) Rd = Rn / Rm

Các hàm này thực hiện phép chia có dấu và không dấu tương ứng. Các cờ điều kiện không bị ảnh hưởng.