Updated repository
This commit is contained in:
108
README.md
108
README.md
@@ -1,7 +1,105 @@
|
||||
Virtual Machines
|
||||
----------------
|
||||
Veits Virtual Machine
|
||||
---------------------
|
||||
|
||||
[](https://travis-ci.org/hellerve/Virtual-Machines)
|
||||
A virtual machine that executes assembler-like code.
|
||||
|
||||
Performance
|
||||
-----------
|
||||
|
||||
Performance is pretty okay on basic, small programs. The included factorial
|
||||
function takes 0.1 second on 100000 iterations. As a scale, a Python 3.3 program
|
||||
on the same machine using the code:
|
||||
|
||||
``
|
||||
def fac(n):
|
||||
if n < 2: return 1
|
||||
else: return n * fac(n-1)
|
||||
fac(12)
|
||||
``
|
||||
|
||||
takes about 3.7 seconds on 100000 iterations.
|
||||
|
||||
This does not say anything about overall performance though and I am not
|
||||
sure whether this small, funny test has any real value in measuring performance.
|
||||
Also, Python is much more feature-rich, so you cannot compare the two at all.
|
||||
|
||||
DISCLAIMER: Parsing takes quite a long time, so try to write your programs as
|
||||
concise as possible.
|
||||
|
||||
Instruction set
|
||||
---------------
|
||||
|
||||
Up until now, all the operations are executed on integers(hence the
|
||||
I\* prefix).
|
||||
|
||||
*Operations overview*:
|
||||
|
||||
* IADD - Adds the two items to each other that are on top of the stack
|
||||
and stores the result on top of the stack.
|
||||
|
||||
* ISUB - Subtracts the two items from each other that are on top of the
|
||||
stack and stores the result on top of the stack.
|
||||
|
||||
* IMULT - Multiplies the two items to each other that are on top of the
|
||||
stack and stores the result on top of the stack.
|
||||
|
||||
* IDIV - Performs a division operation to the two items that are on top
|
||||
of the stack and stores the result on top of the stack.
|
||||
|
||||
* IMOD - Performs a modulo operation to the two items that are on top
|
||||
of the stack and stores the result on top of the stack.
|
||||
|
||||
* ILT - Checks whether the item on top of the stack is greater than the
|
||||
item below it and stores a boolean on top of the stack.
|
||||
|
||||
* IEQ - Checks whether the item on top of the stack is equal to the
|
||||
item below it and stores a boolean on top of the stack.
|
||||
|
||||
* IGT - Checks whether the item on top of the stack is smaller than the
|
||||
item below it and stores a boolean on top of the stack.
|
||||
|
||||
* ILEQ - Checks whether the item on top of the stack is smaller than or
|
||||
equal to the item below it and stores a boolean on top of the stack.
|
||||
|
||||
* IGEQ - Checks whether the item on top of the stack is greater than or
|
||||
equal to the item below it and stores a boolean on top of the stack.
|
||||
|
||||
* BR - Jumps to the instruction that is provided as an argument.
|
||||
|
||||
* BRT - Jumps to the instruction that is provided as an argument if the
|
||||
value on top of the stack is TRUE.
|
||||
|
||||
* BRF - Jumps to the instruction that is provided as an argument if the
|
||||
value on top of the stack is FALSE.
|
||||
|
||||
* ICONST - Puts the argument provided to the operation on top of the
|
||||
stack.
|
||||
|
||||
* LOAD - Loads an element from any position on the stack on top of the
|
||||
stack(usually used to get function arguments like this: LOAD -3).
|
||||
|
||||
* GLOAD - Loads an element from any position on the data segment on
|
||||
top of the stack.
|
||||
|
||||
* STORE - Stores an element on the stack.
|
||||
|
||||
* GSTORE - Stores an element in the data segment.
|
||||
|
||||
* PRINT - Prints the element on top of the stack as character.
|
||||
|
||||
* IPRINT - Prints the element on top of the stack as integer.
|
||||
|
||||
* POP - Pops the element on top of the stack.
|
||||
|
||||
* HALT - Ends the program.
|
||||
|
||||
* CALL - calls a subroutine with a number of arguments.
|
||||
|
||||
* RET - Returns from a subroutine with a return value.
|
||||
|
||||
* FETCH - Fetches a value.
|
||||
|
||||
* IINC -Increments the value on top of the stack by one(equal to ++).
|
||||
|
||||
* IDEC -Decrements the value on top of the stack by one(equal to --).
|
||||
|
||||
Just a bunch of immature interpreters. One interprets brainfuck code(nbfi -
|
||||
naive brainfuck interpreter), the other uses an assembly-based dsl.
|
||||
|
Reference in New Issue
Block a user