5. คำสั่งคำนวณ

5.1. รูปแบบของเอกสาร

สัญกรณ์: Rd, Rm, Rn แทน ARM registers R0-R7 immN แทนค่าทันทีที่มีความกว้าง N บิต เช่น imm8, imm3 carry แทนแฟล็กเงื่อนไข carry, not(carry) แทนส่วนเติมเต็มของมัน ในกรณีของคำสั่งที่มีอาร์กิวเมนต์ register มากกว่าหนึ่งตัว บางตัวอาจเหมือนกันได้ ตัวอย่างเช่น สิ่งต่อไปนี้จะบวกเนื้อหาของ R0 เข้ากับตัวเอง โดยวางผลลัพธ์ใน R0:

  • add(r0, r0, r0)

คำสั่งคำนวณส่งผลต่อแฟล็กเงื่อนไข ยกเว้นเมื่อระบุไว้

5.2. การบวก

  • 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. การลบ

  • 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. การนีเกต

  • neg(Rd, Rn) Rd = -Rn

5.5. การคูณและการหาร

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

ให้ผลลัพธ์ 32 บิตโดยสูญเสีย overflow ผลลัพธ์อาจถือเป็นค่าที่มีเครื่องหมายหรือไม่มีเครื่องหมายตามนิยามของตัวถูกดำเนินการ

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

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

ฟังก์ชันเหล่านี้ทำการหารแบบมีเครื่องหมายและไม่มีเครื่องหมายตามลำดับ แฟล็กเงื่อนไขไม่ได้รับผลกระทบ