Übungsblatt 2: Fallunterscheidungen

Thema dieser Übung ist die Programmierung einfacher Assemblerprogramme, deren Lösung auf einer Fallunterscheidungen beruht. Zu diesem Zweck werden wir erneut die Assemblerentwicklungsumgebung Jasmin benutzen.


Für die Simulation technischer Steuerungen verfügt Jasmin über ein 7-Segment-Display mit vier Stellen, welches im Programmfenster unten mit dem Reiter Display aktiviert wird.

Das Display wird mit Hilfe der ersten vier Speicherworte mit den Adressen 0-3 angesprochen. Dabei ist die Speicherzelle 0 der ganz rechten Stelle zugeordnet. Das Display könnte z. B. die Temperaturanzeige einer Waschmaschine repräsentieren.

Die sieben Segmente werden durch die sieben niederwertigsten Bits eines Bytes entsprechend der Abb. 1 gesteuert.

Display einschalten

Bild von 7-Segment-Anzeige
Abb 1: Ansteuerung des 7-Segment-Displays

Daraus ergibt sich für die Ziffern 0..9 folgender Code:

1101111b ; 9
1111111b ; 8
0000111b ; 7
1111101b ; 6
1101101b ; 5
1100110b ; 4
1001111b ; 3
1011011b ; 2
0000110b ; 1
0111111b ; 0

Hauptspeicheradressen werden durch eckige Klammern adressiert.
Beispiel: mov [0],1011011b schreibt eine zwei in die Stelle geringster Wertigkeit des Displays.

Aufgabe 1: Waschmaschinentemperatur

Als Entwickler/-in sollen Sie ein Assemblerprogramm für eine Waschmaschine schreiben, welches gewählte Waschtemperaturen auf deren vierstelligen 7-Segment-Display anzeigt. Die Waschmaschine verfügt über einen 16-Bit-Intel-Prozessor und kann folglich mit Intel-Assemblerbefehlen programmiert werden.

Die Waschmaschine verfügt über die folgenden Waschprogramme:

Programmnr.ProgrammTemperatur
1Feinwäsche30
2Feinwäsche40
3Buntwäsche40
4Buntwäsche60
5Kochwäsche95
Temperatur 95 Grad
Temperatur 95 Grad
Abb 2: Ausgabebeispiele der Waschmaschine

Eingestellt wird das jeweilige Waschprogramm durch Schreiben der Programmnummer in das AX-Register.

Schreiben Sie ein Assemblerprogramm, welches den im AX-Register stehenden Wert ausliest und das gewählte Programm im 7-Segment-Display, wie in der Abb. 2 dargestellt, durch das zugehörende Programmkürzel und die zugehörende Temperaturangabe visualisiert (F: Fine (Feinwäsche), C: Color (Buntwäsche), H: Hot (Kochwäsche)). Wird ein Wert außerhalb des Bereichs 1-5 eingegeben, so signalisiert die Waschmaschine dies durch Ausgeben der Fehlermeldung Err.

Beschreiben Sie die Bytes des 7-Segment-Displays immer von kleinen hin zu größeren Adressen. Da Jasmin immer 32-Bit-Werte schreibt, würden Sie anderenfalls schon geschriebene Bytes und damit Anzeigewerte überschreiben.


Aufgabe 2: Portogebühren

Das Briefporto ist abhängig vom Gewicht und Zusatzleistungen, wie z. B. die Einschreibegebühr. Schreiben Sie ein Intel-Assemblerprogramm für eine elektronische Waage, die für gewogene Briefe das Porto in Cent anzeigt. Das Gewicht des gewogenen Briefs wird aus dem DX-Register gelesen. Zusätzlich besitzt die Waage einen Schalter, mit dem ein Einschreibebrief gewählt werden kann. Ist dieser gesetzt, so schreibt die Waage eine 1 in das AX-Register, anderenfalls steht dieses auf 0. Ihr Programm wertet entsprechend das DX- und AX-Register aus.

Portoanzeige
Abb 3: Anzeige für einen Einschreibebrief
mit einem Gewicht unter 20g.

Tabelle der Portogebühren:

GewichtPorto in Cent
bis 20g58
bis 50g90
bis 500g145
bis 1000g240

Einschreiben kosten zusätzlich €1,60.


Aufgabe 3: Vierstellige natürliche Dezimalzahlen ausgeben

Schreiben Sie ein Assemblerprogramm, das im AX-Register stehende Zahlen im Bereich [0;9999] auf das 7-Segment-Display von Jasmin ausgibt.

Beispielausgabezahl 5824
Abb 4: Beispielausgabe für die Zahl 5824

Bisher wurden nur die Hauptspeicherzellen 0-3, die in direktem Bezug zu dem Display stehen, eingesetzt. Für diese Aufgabe ist es sinnvoll, die Binärwörter für die Ziffern 0-9 in einen geeigneten Abschnitt des Hauptspeichers zu schreiben und von dort bei Bedarf in die Hauptspeicherzellen 0-3 zu kopieren. Geeignet ist ein Hauptspeicherbereich, wenn sich die Adressen, unter denen die Ziffern stehen, aus den Ziffern der im AX-Register gespeicherten Zahl berechnen lassen. Dies trifft z. B. für die Adressen 10-19 zu, wenn das Binärwort der 0 in der Adresse 10 und das der 9 in der Adresse 19 steht. Ist die Ziffer z. B. 9, so wird das Binärwort jeweils aus der Adresse 10 = 19 - 9 gelesen und in die Adresse der zugehörenden Ziffer des 7-Segment-Displays von Jasmin geschrieben. Aus der berechneten Ziffer lässt sich also recht einfach die Adresse des zugehörenden Binärworts im Speicher berechnen. Derartige Adressrechnungen werden uns noch häufiger begegnen. Insbesondere, wenn Zahlenfolgen im Hauptspeicher zu verarbeiten sind.

Bestimmen Sie die Ziffern der im AX-Register gespeicherten Zahl durch fortgesetztes ganzzahliges Teilen. Beachten Sie dabei folgendes: