kroegerama.com
Teaser

Know How Computer

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

Ablaufdiagramm zu diesem Code

Screenshot

Screenshot