Assembler Aufgabe1


Aufgabe1

Um mit der Programmierung vertrauter zu werden, wird eine Aufgabe gestellt:

Auf der Tastatur wird eine Taste betätigt, das Betriebssystem stellt dafür ein ASCII-Zeichen zur Verfügung.
Die Aufgabe besteht nun darin, den ASCII-Code als hexadezimale Darstellung auszugeben! Das könnte z.B. so aussehen:

Es wurden in dem Beispiel bereits 5 Tasten betätigt, die erste war ein "K", dargestellt wurde das "K" und danach die ASCI-Codierung 4Bh.
Das Programm soll danach nicht zu Ende sein, sondern erneut auf eine Tastatur-Eingabe warten. Die Ausgabe soll aber in der nächsten Zeile erfolgen. Das Program wird durch "Strg C" beendet.

zurück zur Start-Seite (Beispiele)   /   Lösung
zurück zur Start-Seite

 

 

 

 

 

 

 

 

 

 

 

Lösung - diesen Teil sollte man erst später nachlesen!

    Die Lösung steht natürlich bereits im ASCII-Code!

Nemen wir an, dass die Taste "K" betätigt wurde, die ASCII-Codierung ist "4bh", also 01001011.
Teilen wir das Byte in 2 mal vier Bit (Nybble) Teile, so kann man im oberen Teil eine "4h" und unten eine dezimale 11 also ein "bh" lesen. Man muss also die beiden Teile einzel behandeln und dabei nur feststellen, ob es eine Zahl (0 bis 9) oder ein Buchstabe (10 bis 15) ist, denn bei Darstellung des Zeichens muss immer ein Byte erzeugt werden und im oberen Nybble steht eine 3h (0011) sofern es eine Zahl ist oder 4h (0100) sofern es ein Buchstabe ist.

Das ist zu realisieren.

Wir fangen mit dem oberen Nybble an
Damit wir danach auch noch auf das untere Nybble zugreifen können, muss das gesamte Byte erst einmal gerettet werden.
Dann schieben wir den Inhalt des Bytes 4 mal nach rechts (wir nehmen man an, dass von links immer eine 0 eingeschoben wird, rechts geht das Bit verloren).
Dan müssen wir ermitteln, ob es eine Zahl ist. Das geht ganz einfach, in dem man den Wert vom ersten Buchstaben, also 10, vom Wert subtrahiert. Zuvor muss auch der gerettet werden. Ist das Ergebnis negativ, so war es wohl eine Zahl, ist es hingegen 0 oder positiv, also nicht negativ, so muss der Wert größer oder gleich 10 gewesen sein, also ein Buchstabe.
Nun kann man in einem entsprechenden Programmzweig eine 3 (0011) oder eine 4 (0100) hinzufügen und den so bearbeiteten Wert als Zeichen ausgeben - fertig.

Beim unteren Nybble verfährt man genau so, nur muss zuvor das obere Nybble ausgeblendet werden. Das geht mit einer AND-Funktion des Wertes mit einer entsprechenden Maske, also
Wert AND 0fh
aus 4bh wird also 01001011 AND 00001111 = 00001011
Danach weiter wie oben!

Links ist der Ablauf schematisch dargestellt.


    Das ganze hier noch einmal als PAP. Die Speicher sind noch symbolisch, sie müssen noch Registern oder Speicherplätzen zugeordnet werden, dann ist das Programm so gut wie fertig.
Der grau hinterlegte Teil ist in beiden Teilen gleich, also könnte man hieraus auch ein Unterprogramm machen!

Hier kann man sich eine Programm-Variante ansehen.

Und hier gibt eine zweite Variante, unter Anwendung eines NEAR-Unterprogramms. Die FAR-Variante sollte man einmal selbst probieren!

Die Darstellung erfolgte mit dem Windiws-Editor, deshalb sehen einige Zeichen etwas komisch aus!

zurück zur Start-Seite (Beispiele)   /   weiter 1.Beispiel: Ausgabe "Hello World" auf dem Bildschirm
zurück zur Start-Seite