A 64-bit stack-based virtual machine and its assembler, created for fun.
FVM includes two parts: the virtual machine and the assembler.
The build the assembler, you need to intall CHICKEN Scheme first. For example, on Arch Linux:
sudo pacman -S chicken
Then install CHICKEN Scheme dependencies:
sudo chicken-install matchable srfi-69 srfi-4
Then run make, which will build both components:
make
If successful, you will see two executables, the virtual machine fvm
and the assemblerfvm-as
.
After writing the assembly code (examples can be found in the examples
directory), first run the assembler:
./fvm-as input.asm bytecode.bin
This will generate the bytecode file output.bin
. Then run the virtual machine:
./fvm bytecode.bin
FVM contains 4 registers:
There are no general-purpose registers; all operations happen on the stack.
All opcodes are single-byte, except for immediate value instructions.
The instructions supported by FVM are as follows:
sp
0x00
push stack pointer to stack
ssp
0x01
pop a 64-bit number from stack and set stack pointer to it.
bp
sbp
pc
rv
srv
imm
ld
ld8
ld16
ld32
st
st8
st16
st32
dup
pop
swap
over
rot