Skip to content

Metaprogramming computer with Assembler simulation in C++. Created with user 'snarkysnaut', as our students-project.

Notifications You must be signed in to change notification settings

Barrus00/asm-computer-cpp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Assembler simulation in C++

This repo contains an implementation of C++ computer simulation. It has it's own memory, and is able to execute assembler language commands.
It uses c++ templates and metaprogramming.
Instructions:

  • Id(const char*) - Creates a label.

  • Numerical values examples:
    Num<13>, Num<0>, Num<-50>.

  • Mem - Access the memory with addres "Addr", which must be a valid p-value.
    Examples:
    Mem<Num<0>>, Mem<Lea<Id("a")>>.

  • Lea - returns the addres of variable named with id "Id".
    Examples:
    Lea<Id("A")>, Lea<Id("a")>.

  • l-values: Mem.

  • r-alues Mem, Num, Lea.

  • D<Id, Value> - declares a variable with id "Id" and value of "Value"
    Examples:
    D<Id("A"), Num<5>>.

  • Mov<Dst, Src> - copies value of Src into Dst, Dst must be a valid l-value, and Src must be a valid r-value
    Examples:
    Mov<Mem<Num<0>>, Num<13>>, Mov<Mem<Lea<Id("abc")>>, Mem<Num<0>>>.

  • Arithmetic operation:
    Add<Arg1, Arg2> -Adds Arg2 to Arg1.
    Sub<Arg1, Arg2> -Substracts from Arg1, Arg2.bstracts from Arg1, Arg2.
    Inc - Increments Arg
    Dec - Decrements Arg
    Flags (works like in ASM):

    • ZF (zero flag)
    • SF (sign flag)
      Examples:
      Add<Mem<Num<0>>, Num<1>>, Inc<Mem<Lea<Id("a")>>>.
  • Logic operators:
    And<Arg1, Arg2>
    Or<Arg1, Arg2>
    Result is stored in Arg1.
    Not
    Flags:

    • ZF (zero flag)
      Examples:
      And<Mem<Num<0>>, Num<1>>, Not<Mem<Lea<Id("a")>>>.
  • Cmp<Arg1, Arg2> works like Sub<x,y> but doesn't change the Arg1, only sets flags.
    Example: Cmp<Mem<Num<0>>, Num<1>>.

  • Label<Id("label")> - creates a Label, that can be accesed later.

  • Conditional jumps
    Jmp - jumps to a label
    Jz - jumps if Label ZF is set to 1.
    Js - jumps if Label SF is set to 1.
    Example:
    Jmp<Id("label")>, Jz<Id("stop")>.


Example usages are listed in common folder.

About

Metaprogramming computer with Assembler simulation in C++. Created with user 'snarkysnaut', as our students-project.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published