ADD: takes n and m from the pile and stacks the result m + n
SUB: takes n and m from the pile and stacks the result m - n
MUL: takes n and m from the pile and stacks the result m x n
DIV: takes n and m from the pile and stacks the result m / n
MOD: takes n and m from the pile and stacks the result m mod n
NOT: takes n from the pile and stacks the result n = 0
INF: takes n and m from the pile and stacks the result m < n
INFEQ: takes n and m from the pile and stacks the result m <= n
SUP: takes n and m from the pile and stacks the result m > n
SUPEQ: takes n and m from the pile and stacks the result m >= n
FADD: takes n and m from the pile and stacks the result m + n
FSUB: takes n and m from the pile and stacks the result m - n
FMUL: takes n and m from the pile and stacks the result m x n
FDIV: takes n and m from the pile and stacks the result m / n
FCOS: takes n from the pile and stacks the result cos(n)
FSIN: takes n from the pile and stacks the result sin(n)
FINF: takes n and m from the pile and stacks the result m < n
FINFEQ: takes n and m from the pile and stacks the result m <= n
FSUP: takes n and m from the pile and stacks the result m > n
FSUPEQ: takes n and m from the pile and stacks the result m >= n
PADD: takes an Integer n and an address a from the pile and stacks the address a + n
CONCAT: takes n and m, from the pile and stacks the concatenated strings (string ns + string ms) address
CHRCODE: takes n from the pile, which must be a string, and stacks the ASCII code from the first character
STRLEN: takes n, from the pile and stacks the size of the string
CHARAT: takes n and m, from the pile and stacks the ASCII code from the character in the string m at the position n
ALLOC integer_n: allocates a structured block, sized n, and stacks its address
ALLOCN: takes an integer n from the pile and allocates a structured block, sized n, and stacks its address
FREE: takes an address a from the pile and frees its allocated structured block
POPST: removes the last structured block from the heap
EQUAL: takes n and m from the pile and stacks the result n = m
ATOI: takes a String Heap address from the pile and stacks its string's conversion to an integer (it fails if the string doesn't represent an integer)
ATOF: takes a String Heap address from the pile and stacks its string's conversion to a real number (it fails if the string doesn't represent a real number)
ITOF: takes an integer from the pile and stacks its conversion to a real number
FTOI: takes a real number from the pile and stacks its conversion to a whole number - by removing its decimals
STRI: takes an integer from the pile, converts it to a string and stacks its address
STRF: takes a real number from the pile, converts it to a string and stacks its address
PUSHI integer_n: stacks n
PUSHN integer_n: stacks n times the integer 0
PUSHF real_number_n: stacks n
PUSHS string_n: archives s in the String Heap and stacks its address
PUSHG integer_n: stacks the value found in gp[n]
PUSHL integer_n: stacks the value found in fp[n]
PUSHSP: stacks the value of the register sp
PUSHFP: stacks the value of the register fp
PUSHGP: stacks the value of the register gp
PUSHST integer_n: pushes the address of the struct heap at index n to the stack
LOAD integer_n: takes an address a from the pile and stacks the value found in a[n] in the pile or in the heap (depending on a)
LOADN: takes an integer n and an address a from the pile and stacks the value found in a[n] in the pile or in the heap (depending on a)
DUP integer_n: duplicates and stacks the n values of the top of the pile
DUPN: takes the integer n from the pile and duplicates and stacks the n values of the top of the pile
POP integer_n: takes n values from the pile
POPN: takes the integer n from the pile and takes n values m from the pile
STOREL integer_n: takes a value from the pile and stores it in fp[n]
STOREG integer_n: takes a value from the pile and stores it in gp[n]
STORE integer_n: takes a value v and an address a and stores v in a[n] in the pile or the heap (depending on a)
STOREN: takes a value v, an integer n and an address a and stores v in a[n] in the pile or the heap (depending on a)
CHECK integer_n , integer_p: checks that at the top of the pile there's an integer i such that n <= i <= p (it throws an error if this is false)
SWAP: takes the values v and m from the pile and stacks m followed by n
AND: takes n and m from the pile and stacks the result n && m
OR: takes n and m from the pile and stacks the result n || m
WRITEI: takes an integer from the pile and prints its value
WRITEF: takes a real number from the pile and prints its value
WRITES: takes a String Heap address from the pile and prints its string
WRITELN: prints \n
WRITECHR: takes an integer from the pile and prints its corresponding ASCII character
READ: reads a string from the keyboard, stores it in the String Heap and stacks its address
PUSHA label: stacks label's code address
JUMP label: assigns the label's code address to the register pc
JZ label: takes a value v from the pile and if: v = 0, assigns the label's code address to the register pc v != 0, increments register pc by 1
CALL: takes an label's address a from the pile, saves pc and fp in the Call Stack and assigns a to pc and the current sp's value to fp.
RETURN: assigns the current fp's value to sp, reinstates the values fp and pc from the Call Stack and increments pc by 1
START: assigns sp's value to fp
NOP: doesn't do anything
ERR string_x: throws an error with message x
STOP: stops program execution