Ein Programm, um Assembler zu lernen. Angelehnt an den berühmten Know How Computer des WDR-ComputerClub.
Es wird eine einfache Assembler-Ähnliche Programmiersprache und die Zugriffe auf Speicher-Register simuliert. Visualisiert wird das ganze durch "Streichhölzer", die in die verschiedenen Register gefüllt werden.
Funktionen
- Importieren des alten Dateiformats vom Original-Programm
- Anzeigen des Programmzeigers mit Pfeil
- Steuern des Programms (Einzelschritte/Kompletter durchlauf)
- Steuern der Ablaufgeschwindigkeit (zum leichteren Verstehen der Programme)
- Zeilen im Programm hinzufügen/löschen mit automatischer Neuberechnungen der jmp-Adressen
- Kommentieren der Programme
- Anzahl der Register festlegen
- Datentyp der Register festlegen
- Byte (8 bit, unsigned ~ 0 - 255)
- ShortInt (8 bit, signed ~ -127 - 127)
- Word (16 bit, unsigned ~ 0 - 65535)
- SmallInt (16 bit, signed ~ -32768 - 32767)
- Verknüpfen mit den Programmdateien (neues und/oder altes Format)
"Assembler"-Befehle
Befehl | Bedeutung | Beschreibung |
---|---|---|
jmp | Jump | Setzt den Programmzeiger auf die angegebene Position. |
isz | Is Zero | Ist das Register null, springt der Programmzeiger zwei Schritte weiter, sonst einen. |
inc | Increment | Erhöht das Register um 1. |
dec | Decrement | Verringert das Register um 1. |
stp | Stop | Beendet das Programm. |
Beispiel-Programm
Das folgende Programm leert zuerst Register 2 (Zeilen 1 bis 5) und kopiert dann Register 1 nach Register 2 und 3 und leert Register 1 gleichzeitig (Zeilen 7 bis 13). Danach wird Register 3 nach Register 1 zurückgeschrieben (Zeilen 15 bis 20).
Insgesamt wird also Register 1 nach Register 2 kopiert.
01: isz 2 //Ist Register 2 null?
02: jmp 4 //Nein? Dann zu Zeile 4 springen
03: jmp 7 //Ja? Dann zu Zeile 7 springen
04: dec 2 //Register 2 um 1 verringern
05: jmp 1 //Nach Zeile 1 springen
06:
07: isz 1 //Ist Register 1 null?
08: jmp 10 //Nein? Dann zu Zeile 10 springen
09: jmp 15 //Ja? Dann zu Zeile 15 springen
10: dec 1 //Register 1 um 1 verringern
11: inc 2 //Register 2 um 1 erhoehen
12: inc 3 //Register 3 um 1 erhoehen
13: jmp 7 //Zurueck zu Zeile 7 springen
14:
15: isz 3 //Ist Register 3 null?
16: jmp 18 //Nein? Dann zu Zeile 18 springen
17: stp //Ja? Dann ist das Programm fertig => STOP
18: dec 3 //Register 3 um 1 verringern
19: inc 1 //Register 1 um 1 erhoehen
20: jmp 15 //Zurueck zu Zeile 15 springen