Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ohjurot/sregmachine

Simple register machine for learning assembler (Windows .NET)
https://github.com/ohjurot/sregmachine

assembler-emulator assembly-language csharp dotnet register-machine

Last synced: about 14 hours ago
JSON representation

Simple register machine for learning assembler (Windows .NET)

Awesome Lists containing this project

README

        

# SRegMachine
Simple register machine for learning assembler (Windows .NET 4.8)

![SRegMachine_Image](./image.png)

## Instruction List

#### Loading and moving Values

```assembly
LOADI $value # Load the value '$value' into register 'reg0'
```

```assembly
MOV # Copyies the value from 'reg1' into 'reg0'
```

#### Math with registers

Every math instructions will set flags (zero, neg, ov)

```assembly
ADD # 'reg0' = 'reg0' + 'reg1'
```

```assembly
SUB # 'reg0' = 'reg0' - 'reg1'
```

```assembly
MUL # 'reg0' = 'reg0' * 'reg1'
```

```assembly
DIV # 'reg0' = 'reg0' / 'reg1'
```

```assembly
MOD # 'reg0' = 'reg0' % 'reg1'
```

#### Math with integers

Every math instructions will set flags (zero, neg, ov)

```assembly
ADD $value # 'reg0' = 'reg0' + 'value'
```

```assembly
SUB $value # 'reg0' = 'reg0' - 'value'
```

```assembly
MUL $value # 'reg0' = 'reg0' * 'value'
```

```assembly
DIV $value # 'reg0' = 'reg0' / 'value'
```

```assembly
MOD $value # 'reg0' = 'reg0' % 'value'
```

#### Jumping

Labels are defined by typing a ':' (Collum)

```assembly
JMP $label_name # Will jumpt to 'label_name'
```

```assembly
JMPZ $label_name # Will jumpt to 'label_name' when zero flag is set
```

```assembly
JMPNZ $label_name # Will jumpt to 'label_name' when zero flag is NOT set
```

```assembly
JMPN $label_name # Will jumpt to 'label_name' when negative flag is set
```

```assembly
JMPNN $label_name # Will jumpt to 'label_name' when negative flag is NOT set
```

```assembly
JMPO $label_name # Will jumpt to 'label_name' when overflow flag is set
```

```assembly
JMPNO $label_name # Will jumpt to 'label_name' when overflow flag is NOT set
```

#### Flow Control

```assembly
HOLD # Will hold the execution
```

```assembly
RST # Will reset to the first instuction (continues execution)
```

```assembly
EOF # End of file (RST + HOLD)
```