Giter Club home page Giter Club logo

smallvm's Introduction

smallvm

A very minimal virtual machine written in rust.

The virtual machine has:

  • 8 Registers
  • A stack
  • A heap
  • Data types include: u8, i8, u16, i16, u32, i32, u64, i64, f32, f64

Instruction Set

Root assembly instructions

Instruction Left Input Right Input Operation
NOP No Operation
MOV Register Variable Move variable to register
MOVR Register Register Move register contents to another register
JMP Register Jump to memory location
JE Register Jump if equal
JNE Register Jump not equal
JG Register Jump if greater
JL Register Jump if less
CMP Register Register Compare two registers
ADD Register Register Add 2 registers, push result to stack
SUB Register Register Subtract 2 registers, push result to stack
MUL Register Register Multiply 2 registers, push result to stack
DIV Register Register Divide 2 registers, push result to stack
AND Register Register Bitwise AND on 2 registers, push result to stack
OR Register Register Bitwise OR on 2 registers, push result to stack
XOR Register Register Bitwise Exclusive OR on 2 registers, push result to stack
SHR Register Variable Shift register to the right by Variable
SHL Register Variable Shift register to the left by Variable
VPUSH Variable Push variable contents on to stack
VPUSHR Register Push register contents on to stack
VPOP Variable Pops variable from stack to register
CALL Register Calls function at address in the register
RET Return from routine
HALT Halt CPU/Exit
VSTORE Address Variable Store var into VMHeap at specific address from stack
VLOAD Address Load var from VMHeap and push value to stack
VSTORER Address Register Store var in VMHeap from register contents
VLOADR Register Address Loads a variable from VMHeap to register

Debugging assembly instructions

Instruction Left Input Right Input Operation
PRINTR Register Print contents of register
PRINTV Address Print contents of variable at address

Example Program:

1 0 0 10    MOV(R0, 10)  
1 1 0 8     MOV(R1, 8)  
1 2 0 22    MOV(R2, 23) Location to jump to if R0 is greater than R1  
1 3 0 25    MOV(R3, 25) Location to jump to otherwise  
6 0 1       CMP(R0, R1)  
23 2        JG(R2) Jump if R0 is greater than R1  
3 3         JMP(R3)  
7 0         PRINTR(R0)  
22          HALT()  
7 1         PRINTR(R1)  
22          HALT()  

smallvm's People

Contributors

tarekwiz avatar kensuenobu avatar

Stargazers

 avatar JairoAdelRio avatar Chigiri Tsutsumi avatar  avatar Noé Garcia avatar Daniel avatar MarcosA avatar Wizard avatar Aditya Kumar avatar Gautam  avatar Cal avatar Muhammad Akbar Iskandar avatar  avatar  avatar  avatar Richard Melkonian avatar Omer GOKSOY avatar Nobuharu Shimazu avatar Dorian Heinrichs avatar lll1412 avatar Daniel VAHOS MENDOZA avatar skanehira avatar  avatar Miryam Huang avatar Andrew Numrich avatar HLedgerBot avatar astrolemonade avatar Adam Romano avatar Guido Curcio avatar  avatar Andrey Kirichenko avatar RadeonGalwet avatar jay avatar CHENG KUN avatar AtropineTears avatar Justin Workman avatar AV avatar  avatar  avatar leanfox avatar Vinícius Souza avatar Lucas Arriesse avatar  avatar Fuwn avatar Kennedy Tedesco avatar Ryan Chandler avatar Jack White avatar Leon Hartley avatar Ralph Caraveo avatar  avatar Varun Varma avatar von MUTINDA avatar Faris Sufyan avatar LEI Zongmin avatar RaINi_ avatar mochizoo avatar codetrotter avatar Mike Panetta avatar  avatar  avatar Aniket Mathur avatar Andrejs Agejevs avatar Supratik Das avatar Yvan Sraka avatar Thomas Versteeg avatar Changwon Choe avatar Shardul Nalegave avatar  avatar Anish Mukherjee avatar  avatar Willi Kappler avatar Andrew Banchich avatar Ra avatar Enrico Casini avatar  avatar Phillip Nguyen avatar Andriy Semenets avatar yossarian avatar Raghava Nellaturu avatar Stefan Lukas avatar Thomas Roberts avatar Siddhant Rao avatar  avatar Nicolas Penot avatar Brad Svercl avatar Andranik avatar Adelar da Silva Queiróz avatar Cyber avatar Alessandro Re avatar Brandon Foltz avatar Allan Jorge avatar 许杰友 Jieyou Xu (Joe) avatar Brandon White avatar Matthias avatar

Watchers

Ben Chuanlong Du avatar James Cloos avatar Kennedy Tedesco avatar  avatar  avatar Changwon Choe avatar

smallvm's Issues

Add INC

Increment variable or register (6502 Instruction Set)

Add compiler

Add a compiler that can read the commands to generate a VM Assembly application, and output each command as its byte/variable equivalent to a file. Basically, add a serializer/deserializer.

Add DEC

Use DEC to decrement register or variable. (6502 Instruction Set)

Add NOT

Add NOT operation (Motorola CISC)

Add BIT

Bit test comparison (CISC)

Add CLR

Add the ability to Clear a register using CLR (Motorola CISC)

Add NEG

Two's compliment negation (CISC)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.