(Only 64-bit Architecture Supported)
- DEFINE
- INCLUDE
- PUSH
- ADDI
- SUBI
- MULI
- DIVI
- ADDF
- SUBF
- MULF
- DIVF
- JMP
- HALT
- IGNORE_HALT
- NOP
- RET
- DUP
- SWAP
- CALL
- DROP
- JMP_IF
- NOT
- EQI
- EQF
- PRINT_ASC
(See Instruction Help)
> go build vm-go.go > .\vm-go.exe
> chmod +x build.sh > ./build.sh > ./vm-go
> .\go_build.ps1 .\vm-go.go > .\vm-go.exe
> .\go_build.ps1 .\vm-go.go > .\vm-go.exe -i .\examples\fib.vasm -debug -compile see generated .\examples\fib.vm
> ./vm-go -i examples/hello_world.vasm Hello, World
See examples folder for more .vasm Examples
> .\go_build.ps1 .\vm-go.go > .\vm-go.exe -i .\examples\powers_of_two.vasm -limit 71 see .\vm-go.exe -h for help on input paramenters
'vasm' Instruction Set which generated powers of 2 : powers_of_two.vasm
# Pushing initial PUSH0 PUSH1 # Starting Loop loop1: ADDI # Adding Last two of the stack DUP 0 # Duplicating DUP 1 # Duplicating JMP loop1
---- PROGRAM TRACE BEG ---- JMP : {int64holder:2 float64holder:5e-324 pointer:} DUP : {int64holder:1 float64holder:0 pointer:} DUP : {int64holder:0 float64holder:0 pointer:} ADDI PUSH : {int64holder:1 float64holder:5e-324 pointer:} PUSH : {int64holder:0 float64holder:5e-324 pointer:} ---- PROGRAM TRACE END ---- ---- STACK BEG ---- {1 5e-324 } {2 5e-324 } {4 5e-324 } {8 5e-324 } {16 5e-324 } {32 5e-324 } {64 5e-324 } {128 5e-324 } {256 5e-324 } {512 5e-324 } {1024 5e-324 } {2048 5e-324 } {4096 5e-324 } {8192 5e-324 } {16384 5e-324 } {32768 5e-324 } {65536 5e-324 } {131072 5e-324 } ---- STACK END ----
Calculating 'e' from e.vasm
> .\vm-go.exe -i .\examples\e.vasm -limit 120---- PROGRAM TRACE BEG ---- JMP : {int64holder:3 float64holder:5e-324 pointer:} SWAP : {int64holder:2 float64holder:0 pointer:} SWAP : {int64holder:1 float64holder:0 pointer:} MULF SWAP : {int64holder:2 float64holder:0 pointer:} DUP : {int64holder:0 float64holder:0 pointer:} ADDF PUSH : {int64holder:-9223372036854775808 float64holder:1 pointer:} SWAP : {int64holder:2 float64holder:0 pointer:} ADDF DIVF DUP : {int64holder:2 float64holder:0 pointer:} PUSH : {int64holder:-9223372036854775808 float64holder:1 pointer:} PUSH : {int64holder:-9223372036854775808 float64holder:1 pointer:} PUSH : {int64holder:-9223372036854775808 float64holder:1 pointer:} PUSH : {int64holder:-9223372036854775808 float64holder:1 pointer:} ---- PROGRAM TRACE END ---- ---- STACK BEG ---- {-9223372036854775808 10 } {-9223372036854775808 3.6288e+06 } {-9223372036854775808 2.7182815255731922 } <- Approximation of 'e' using Taylor series around 0 and value of x=1 ---- STACK END ----
- DEFINE (Constant Name) (Operand Any) : Define Constants
- INCLUDE (Operand File Path String) : Include file path and load program from include path to VM
- PUSH (Operand Any) : Push Operand to Stack
- ADDI : Add top two operands as integers and push it back to top of Stack
- SUBI : Subtract top two operands as integers and push it back to top of Stack
- MULI : Multiply top two operands as integers and push it back to top of Stack
- DIVI : Divide top two operands as integers and push it back to top of Stack
- ADDF : Add top two operands as float and push it back to top of Stack
- SUBF : Subtract top two operands as float and push it back to top of Stack
- MULF : Multiply top two operands as float and push it back to top of Stack
- DIVF : Divide top two operands as float and push it back to top of Stack
- JMP (Operand Int / Label) : Jump to label or location within Stack
- HALT : Halt the Virtual Machine
- IGNORE_HALT : Ignore any HALT instruction in the file
- NOP : Perform No Operation in Stack
- RET : Point Instruction Pointer to top of Satck
- DUP (Operand Int) : Duplicate Operand from operand location of stack and push it back to top of Stack
- SWAP (Operand Int) : Swap Values of operand location and top of stack (can be used as an accumulator)
- CALL (Operand Int / Label) : Jump to label or funcall within Stack
- DROP : Remove Value from top of Stack
- JMP_IF (Operand Int) : Jump If int64 is not 0
- NOT : !0 -> 0 and 0 -> 1 on the top of the Stack
- EQI : Perform Integer Equality on top two values of stack, consumes them and push 1 if equal and 0 otherwise on top of Stack
- EQF : Perform Float Equality on top two values of stack, consumes them and push 1 if equal and 0 otherwise on top of Stack
- PRINT : Prints the top of the stack and consumes it
- PRINT_ASC : Prints ascii format of the top of the stack and consumes it