MIT-Curricular/ES/Lab/qui.md
2025-08-14 11:08:31 +05:30

58 lines
No EOL
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

| Instruction | Description | Example | Effect / Notes |
|---|---|---:|---|
| MOV Rd, Rn | Move register → register | MOV R0, R1 | Copies value of R1 into R0 |
| MOV Rd, #imm | Move immediate value | MOV R0, #0x12 | Loads constant into Rd |
| MOVW Rd, #imm | Move lower 16 bits | MOVW R0, #0x1234 | Only lower 16 bits changed |
| MOVT Rd, #imm | Move upper 16 bits | MOVT R0, #0x1234 | Only upper 16 bits changed |
| MVN Rd, Rn | Move bitwise NOT | MVN R0, R1 | R0 = NOT R1 |
| LDR Rd, [Rn] | Load word | LDR R0, [R1] | R0 = 32-bit value from mem at R1 |
| STR Rd, [Rn] | Store word | STR R0, [R1] | Store R0 into mem at R1 |
| LDRB Rd, [Rn] | Load byte | LDRB R0, [R1] | Zero-extends 8-bit mem into Rd |
| STRB Rd, [Rn] | Store byte | STRB R0, [R1] | Stores only low byte of R0 |
| LDRH Rd, [Rn] | Load halfword | LDRH R0, [R1] | Zero-extends 16-bit mem into Rd |
| STRH Rd, [Rn] | Store halfword | STRH R0, [R1] | Stores only low halfword of R0 |
| LDRSB Rd, [Rn] | Load signed byte | LDRSB R0, [R1] | Sign-extends 8-bit mem into Rd |
| LDRSH Rd, [Rn] | Load signed halfword | LDRSH R0, [R1] | Sign-extends 16-bit mem into Rd |
| ADD Rd, Rn, Op2 | Add | ADD R0, R1, R2 | R0 = R1 + Op2 |
| ADC Rd, Rn, Op2 | Add with carry | ADC R0, R1, R2 | Adds carry flag C |
| ADDS Rd, Rn, Op2 | Add & set flags | ADDS R0, R1, R2 | Updates N, Z, C, V |
| ADCS Rd, Rn, Op2 | Add w/ carry & flags | ADCS R0, R1, R2 | Adds C & updates flags |
| SUB Rd, Rn, Op2 | Subtract | SUB R0, R1, R2 | R0 = R1 - Op2 |
| SBC Rd, Rn, Op2 | Subtract with carry | SBC R0, R1, R2 | R0 = R1 - Op2 - (1 - C) |
| RSB Rd, Rn, Op2 | Reverse subtract | RSB R0, R1, R2 | R0 = Op2 - R1 |
| RSC Rd, Rn, Op2 | Reverse sub w/ carry | RSC R0, R1, R2 | R0 = Op2 - R1 - (1 - C) |
| MUL Rd, Rn, Rm | Multiply | MUL R0, R1, R2 | R0 = R1 × R2 |
| MLA Rd, Rs1, Rs2, Rs3 | Multiply & accumulate | MLA R0, R1, R2, R3 | R0 = (Rs1 × Rs2) + Rs3 |
| MLS Rd, Rm, Rs, Rn | Multiply & subtract | MLS R0, R1, R2, R3 | R0 = Rn - (Rs × Rm) |
| UMULL RdLo, RdHi, Rn, Rm | Unsigned multiply long | UMULL R0, R1, R2, R3 | 64-bit result split across RdHi:RdLo |
| SMULL RdLo, RdHi, Rn, Rm | Signed multiply long | SMULL R0, R1, R2, R3 | Signed 64-bit result |
| AND Rd, Rn, Op2 | Bitwise AND | AND R0, R1, R2 | R0 = R1 AND Op2 |
| ORR Rd, Rn, Op2 | Bitwise OR | ORR R0, R1, R2 | R0 = R1 OR Op2 |
| ORN Rd, Rn, Op2 | Bitwise OR NOT | ORN R0, R1, R2 | R0 = R1 OR (NOT Op2) |
| EOR Rd, Rn, Op2 | Bitwise XOR | EOR R0, R1, R2 | R0 = R1 XOR Op2 |
| TST Rn, Op2 | Test bits (AND) | TST R0, #0x08 | Flags from Rn AND Op2 |
| TEQ Rn, Op2 | Test equivalence (XOR) | TEQ R0, R1 | Flags from Rn XOR Op2 |
| LSL Rd, Rn, Op2 | Logical shift left | LSL R0, R1, #2 | Shift left, fill with 0 |
| LSR Rd, Rn, Op2 | Logical shift right | LSR R0, R1, #2 | Shift right, fill with 0 |
| ASR Rd, Rn, Op2 | Arithmetic shift right | ASR R0, R1, #2 | Shift right, fill with sign bit |
| ROR Rd, Rn, Op2 | Rotate right | ROR R0, R1, #1 | Bits wrap around right |
| RRX Rd, Rm | Rotate right w/ extend | RRX R0, R1 | Rotate through carry |
| CMP Rn, Op2 | Compare (subtract) | CMP R0, #10 | Flags from Rn - Op2 |
| CMN Rn, Op2 | Compare negative | CMN R0, #5 | Flags from Rn + Op2 |
| B label | Branch | B loop | Unconditional jump |
| BL label | Branch w/ link | BL func | Calls function, LR = return addr |
| BX Rm | Branch indirect | BX LR | Jump to address in Rm |
| BEQ label | Branch if equal | BEQ done | Z = 1 |
| BNE label | Branch if not equal | BNE loop | Z = 0 |
| BCS label | Branch if carry set | BCS carry_case | C = 1 |
| BCC label | Branch if carry clear | BCC no_carry | C = 0 |
| BMI label | Branch if negative | BMI neg_case | N = 1 |
| BPL label | Branch if positive | BPL pos_case | N = 0 |
| BVS label | Branch if overflow set | BVS ovf_case | V = 1 |
| BVC label | Branch if overflow clear | BVC no_ovf | V = 0 |
| BLO label | Branch if lower (unsigned) | BLO lower_case | C = 0 & Z = 0 |
| BHS label | Branch if higher/same (unsigned) | BHS ok_case | C = 1 or Z = 1 |
| BGE label | Branch if ≥ (signed) | BGE greater_eq | V = N or Z = 1 |
| BLT label | Branch if < (signed) | BLT less_case | V ≠ N & Z = 0 |
| BGT label | Branch if > (signed) | BGT greater_case | V = N & Z = 0 |
| BLE label | Branch if ≤ (signed) | BLE less_eq | V ≠ N or Z = 1 |