-
Notifications
You must be signed in to change notification settings - Fork 2
Bytecode Instruction Set
Adriano Raksi edited this page Jan 21, 2019
·
10 revisions
| Mnemonic | Opcode (in hex) | Other argument bytes [count]:[label] | Description |
|---|---|---|---|
| NOP | 00 | Does nothing | |
| HLT | 01 | Kills current running thread | |
| LOAD | 02 | 1: reg_address, 1: data_type, 1/2/4/8: data | Loads numerical data of correct size to a specified register |
| MOVE | 03 | 1: reg_address0, 1: reg_address1 | Copies data from register of reg_address0 to register of reg_address1 |
| CAST | 04 | 1: reg_address, 1: type | Casts data in a specified register to a different sized data type |
| PUSH | 05 | 1: reg_address | Pushes data in a specified register to stack |
| POP | 06 | Pops off stack | |
| PUT | 07 | 8: stack_address, 1: reg_address | Copies data from a specified register to a specified address at stack |
| PEEK | 08 | 8: stack_address, 1: reg_address | Copies data from a specified address at stack to a specified register |
| MALLOC | 09 | 8: heap_address, 8: size | Allocates a specific size on an address at heap |
| CALLOC | 0A | 8: heap_address, 8: size | Allocates a specific size on an address at heap, then clears the memory |
| REALLOC | 0B | 8: heap_address, 8: size | Resizes an address at heap to a specified size |
| FREE | 0C | 8: heap_address | Frees an address at heap |
| STORE | 0D | 8: heap_address, 8: offset_address, 1: reg_address | Copies data in a specified register to offset of an address at heap |
| GET | 0E | 8: heap_address, 8: offset_address, 1: reg_address | Copies data at offset of an address at heap to a specified register |
| ALLOC_STATIC | 0F | 8: static_address, 8: size | Allocates a specific size on an address at static segment |
| STORE_STATIC | 10 | 8: static_address, 8: offset_address, 1: reg_address | Copies data in a specified register to offset of an address at static segment |
| GET_STATIC | 11 | 8: static_address, 8: offset_address, 1: reg_address | Copies data at offset of an address at static segment to a specified register |
| JUMP | 12 | 8: reg_address | Jumps unconditionally to a specified code segment index stored in given register |
| JUMP_IF_TRUE | 13 | 8: reg_address | Jumps to a specified code segment index in given register if arithmetic register is true |
| JUMP_IF_FALSE | 14 | 8: reg_address | Jumps to a specified code segment index in given register if arithmetic register is false |
| ADD | 15 | 1: reg_address0, 1: reg_address1 | Add reg_address1 to reg_address0 |
| SUB | 16 | 1: reg_address0, 1: reg_address1 | Subtact reg_address1 from reg_address0 |
| MUL | 17 | 1: reg_address0, 1: reg_address1 | Multiply reg_address0 by reg_address1 |
| DIV | 18 | 1: reg_address0, 1: reg_address1 | Divide reg_address0 by reg_address1 |
| MOD | 19 | 1: reg_address0, 1: reg_address1 | Modulus of reg_address0 by reg_address1 |
| AND | 1A | 1: reg_address0, 1: reg_address1 | Bitwise AND of reg_address0 and reg_address1 |
| XOR | 1B | 1: reg_address0, 1: reg_address1 | Bitwise XOR of reg_address0 and reg_address1 |
| OR | 1C | 1: reg_address0, 1: reg_address1 | Bitwise OR of reg_address0 and reg_address1 |
| NOT | 1D | 1: reg_address0 | Bitwise NOT of reg_address |
| LSHIFT | 1E | 1: reg_address0, 1: reg_address1 | Shift reg_address0 to the left by reg_address1 |
| RSHIFT | 1F | 1: reg_address0, 1: reg_address1 | Shift reg_address0 to the right by reg_address1 |
| LESS | 20 | 1: reg_address0, 1: reg_address1 | Boolean less than of reg_address0 and reg_address1 |
| LESS_EQ | 21 | 1: reg_address0, 1: reg_address1 | Boolean less than or equality of reg_address0 and reg_address1 |
| GREAT | 22 | 1: reg_address0, 1: reg_address1 | Boolean greater than of reg_address0 and reg_address1 |
| GREAT_EQ | 23 | 1: reg_address0, 1: reg_address1 | Boolean greater than or equality of reg_address0 and reg_address1 |
| EQUAL | 24 | 1: reg_address0, 1: reg_address1 | Boolean equality of reg_address0 and reg_address1 |
| N_EQUAL | 25 | 1: reg_address0, 1: reg_address1 | Boolean inequality of reg_address0 and reg_address1 |
| LOG_AND | 26 | 1: reg_address0, 1: reg_address1 | Boolean and of reg_address0 and reg_address1 |
| LOG_OR | 27 | 1: reg_address0, 1: reg_address1 | Boolean or of reg_address0 and reg_address1 |
| LOG_NOT | 28 | 1: reg_address0 | Boolean not of reg_address0 |