A dumbed-down version of assembly with REPL support
Due to jmp being its own function that waits for execution to finish, recursive loops will eventually result in a stack overflow.
To get around this, use the LOOP and LOOPNOINC instructions for looping.
| Register | Usage |
|---|---|
| R0-12 | General purpose registers |
| P0-12 | Paramater registers, for passing arguments to functions/syscalls |
| RET0-12 | Return registers, for returning values from functions/syscalls |
| L0 | Loop register, defines how many times to jmp to a label |
| Instruction | Usage |
|---|---|
| PUSH register | Pushes register onto the stack |
| POP register | Pops the top value off the stack and into register |
| MOV register1 value/register2 | Copies the value of value/register2 into register1 |
| INC register | Increments the value in register |
| DEC register | Decrements the value in register |
| ADD register1 value/register2 | Adds value/register2 to register |
| SUB register1 value/register2 | Subtracts value/register2 from register |
| MUL register1 value/register2 | Multiplies register1 by value/register2 |
| DIV register1 value/register2 | Divides register1 by value/register2 |
| XOR register1 value/register2 | Performs an XOR on register1 with value/register2 |
| CMP register1 value/register2 | Compares value/register2 to register and sets equal_flag, lesser_flag & greater_flag accordingly |
| JMP label | Calls a builtin or user defined function |
| JE label | Calls label only if equal_flag is true |
| JNE label | Calls label only if equal_flag is false |
| JZ label | Calls label only if zero_flag is true |
| JNZ label | Calls label only if zero_flag is false |
| JG, JGE, JL, JLE label | Jump greater, Jump greater than or equal, Jump less than, Jump less than or equal |
| SETG, SETGE, SETL, SETLE register | Sets register to a boolean based on the lesser, greater and equal flags |
| LOOP label | Calls label until L0 is 0, decrementing it each loop |
| LOOPNODEC label | Calls label L0 times without decrementing it, much faster than LOOP |
| Function | Usage |
|---|---|
| prints P0 | |
| printline | prints P0 with a newline |
| input | Fetches user input and places it in RET0 |
| debug | Prints out the entire program layout - functions, register states etc |
| exit | Exits the program with exit code P0 |