JASm Coding – Beispielprogramme 1 (Sprung, Addition, Multiplikation , Ausgabe und Funktion)

Ausgabe

Das folgende Beispielprogramm gibt den Text “Hallo Welt!”, bzw. die ASCII Werte der einzelnen Zeichen aus. Hierzu wird mittels einer Schleife jeder Datensatz des Textes einzeln in die Ausgabe transferiert.

          @Start          # Initialisierung des Programmzeigers
Step:     -3              # Schrittweite des Programmzeigers

REM Variablen und Konstanten

txt:      "Hallo\ Welt!"  # Textspeicher
len:      @len            # Länge des Textes + 1
inc:      -1              # Konstante zum Inkrementieren
dec:      1               # Konstante zu Dekrementieren
tmp:      0               # temp. Speicher zum negieren von Werten

REM Programmstart

Start:    SUB @len @dec   # Länge der Zeichenkette ermitteln

REM Schleife

Out:      SUB @tmp @tmp   # Puffer definieren und nullen
          SUB @tmp i:@txt # Zeichen in Puffer (negiert)
          SUB -1 @tmp     # Zeichen ausgeben
          SUB @i @inc     # nächstes Zeichen
          SUB @len @dec   # Zähler dekrementieren
          JA @len @Out    # Schleifenende

REM Programmende

          SUB 0 0         # Programm beenden

In diesem einfachen Beispiel lässt sich die Länge des Textes noch einfach ermitteln, da der Text in Zelle 1 beginnt. @len zeigt dann auf die erste Speicherzelle danach, muss also lediglich um 1 reduziert werden. Dies ist allgemein jedoch nicht der Fall, sodass man die Tatsächliche Länge durch Subtraktion der Anfangsadresse von der Endadresse ermitteln muss. Hierzu ein Codeausschnitt:

...

txt:      "Hallo\ Welt!"     # Textspeicher
length:   @length            # Endadresse des Textes + 1
begin:    @txt               # Startadresse des Textes
          SUB @length @begin # Ende - Anfang = Länge des Textes

Wir nehmen an, dass der Text hier in Zelle 10 beginnt, sodass @txt = 10 ist. @length zeigt auf die erste Zelle hinter dem elf Zeichen langen Text und somit auf Zelle 21 und beinhaltet die eigene Adresse, also 21. @begin zeigt auf Zelle 22 und beinhaltet die Startdresse des Textes (@txt, also 10). Mit der Subtraktion wird nun @length = 21 – 10 = 11 berechnet.

Dieses Verfahren bietet sich allerdings auch nur für Texte konstanter Länge an. Wie mit Strings, bzw. Datensätzen umgegangen wird, die sich zur Laufzeit in ihrem Umfang verändern, wird in einem späteren Beispiel näher betrachtet. Allerdings kann schon soviel vorweggenommen werden, dass die klassischen Konzepte des Nullterminierten Strings, bzw. eines Längenfeldes auch hier Verwendung finden.

Beitrag vorlesen lassen

Kommentar hinterlassen

Nutze dieses Kommentarfeld um deine Meinung oder Ergänzung zu diesem Beitrag kundzutun. Verhalte dich bitte respektvoll und höflich! Kommentare werden vor der Veröffentlichung in der Regel moderiert und bei Verstößen gegen geltendes Recht, die guten Sitten, fehlendem Bezug oder missbräuchlicher Verwendung nicht freigegeben oder gelöscht.
Über die Angabe deines Namens, deiner E-Mail Adresse und deiner Webseite freuen wir uns, doch diese Felder sind optional. Deine E-Mail Adresse wird dabei zu keinem Zeitpunkt veröffentlicht.

Um mit dem Betreiber dieser Seite nicht-öffentlich in Kontakt zu treten, nutze die Möglichkeiten im Impressum.