| Instruction | Description | Aliases |
|---|---|---|
| System instructions | ||
| halt | Stop! | None |
| read rX | Place user input in register rX | None |
| write rX | Print contents of register rX | None |
| nop | Do nothing | None |
| Setting register data | ||
| setn rX N | Set register rX equal to the integer N (-128 to +127) | None |
| addn rX N | Add integer N (-128 to 127) to register rX | None |
| copy rX rY | Set rX = rY | mov |
| Arithmetic | ||
| add rX rY rZ | Set rX = rY + rZ | None |
| sub rX rY rZ | Set rX = rY - rZ | None |
| neg rX rY | Set rX = -rY | None |
| mul rX rY rZ | Set rX = rY * rZ | None |
| div rX rY rZ | Set rX = rY // rZ (integer division; rounds down; no remainder) | None |
| mod rX rY rZ | Set rX = rY % rZ (returns the remainder of integer division) | None |
| Jumps! | jumpn N | Set program counter to address N | None |
| jumpr rX | Set program counter to address in rX | jump |
| jeqzn rX N | If rX == 0, then jump to line N | jeqz |
| jnezn rX N | If rX != 0, then jump to line N | jnez |
| jgtzn rX N | If rX > 0, then jump to line N | jgtz |
| jltzn rX N | If rX < 0, then jump to line N | jltz |
| calln rX N | Copy addr. of next instr. into rX and then jump to mem. addr. N | call |
| Interacting with memory (RAM) | ||
| pushr rX rY | Store contents of register rX onto stack pointed to by reg. rY | None |
| popr rX rY | Load contents of register rX from stack pointed to by reg. rY | None |
| loadn rX N | Load register rX with the contents of memory address N | None |
| storen rX N | Store contents of register rX into memory address N | None |
| loadr rX rY | Load register rX with data from the address location held in reg. rY | loadi, load |
| storer rX rY | Store contents of register rX into memory address held in reg. rY | storei, store |