Skip to content

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
Clone this wiki locally