-
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 |