| Inhalt Einsendeaufgaben | Einsendeaufgaben zur Kurseinheit 1 |
Falls Sie irgendwelche Fragen zu den Einsendeaufgaben, Kurseinheiten oder Musterlösungen bzw. Probleme mit dem Rechner, der Programmierung oder den beigelegten Programmen haben oder sonstwie nicht weiter kommen, können Sie uns telefonisch erreichen - und zwar:
Mittwochs von 9:00 bis 12:00 und von 13:00 bis 15:00 Uhr
unter der Nummer 02331 / 987 - 4408
Sie können uns Ihre Frage auch zuschicken oder per E-Mail senden:
K1714@fernuni-hagen.de
Wir möchten Ihnen die Möglichkeit geben, uns Ihre Lösungen auf elektronischem Wege zukommen zu lassen. Dazu können Sie uns die von Ihnen erstellten oder ergänzten Programme auf Diskette zusammen mit Ihren schriftlichen Ausarbeitungen zusenden.
Sie bekommen von uns (zusammen mit dem Praktikumsrechner) eine Diskette mit der Software (Assembler, Simulator, Terminalprogramm, Hilfsprogramme) und eine weitere Diskette zu den Einsendeaufgaben zu Kurseinheit 1 bis 5 zugeschickt. Diese sind schreibgeschützt, bitte fertigen Sie sich Arbeitskopien davon an.
Erst in Kurseinheit 2 wird genauer auf die Funktionsweise eines Assemblers eingegangen. Hier folgt also nur eine kurze Einführung in Begriffe und Funktionsweisen: Der Begriff Assembler steht für mehrere Sachen. Die Programmiersprache, um die es geht, heißt Assembler. Das Programm, welches ein Assembler-Programm übersetzt (assembliert), heißt jedoch auch Assembler. Jeder Prozessor hat seine eigene Assembler-Sprache, die sich teilweise erheblich, teilweise kaum voneinander unterscheiden. Wir werden uns hauptsächlich mit dem 6809-Assembler beschäftigen.
Der Assembler erzeugt aus einem Assembler-Programm eine Folge von Maschinenbefehlen, die ein Mikroprozessor direkt abarbeiten kann (jedenfalls nachdem die Maschinenbefehle irgendwie in den Speicher des Mikrorechners gelangt sind). Dazu wird jeder Assemblerbefehl in einen Maschinenbefehl übersetzt, der aus Opcodes und Operanden besteht. Weiterhin erzeugt der Assembler (auf Wunsch) ein Listing, welches eine Kombination aus Eingabe-Programm und Ausgabe-Maschinencode ist. Das Listing hat nur eine Kontrollfunktion (welcher Befehl wurde wie und an welcher Adresse assembliert) und wird später nicht mehr benötigt. Es kann auf Wunsch um eine Cross-Reference-Tabelle und/oder eine Symboltabelle ergänzt werden. Diese Tabellen enthalten Informationen über die vom Assembler durchgeführte Umsetzung und Benutzung von symbolischen Namen (Labels) in physikalische Adressen oder Daten.
Unter dem Disassemblieren eines Maschinenprogramms versteht man den Vorgang, die Arbeit des Assemblers (soweit wie möglich) rückwärts zu vollziehen, d.h. aus dem Maschinenprogramm wieder ein Assemblerprogramm zu erzeugen. Das ist oft wichtig, wenn z.B. die Assemblerlistings oder -programme eines Maschinenprogramms nicht mehr zur Verfügung stehen (Teile des Monitorprogramms des Mikrorechners waren z.B. verschwunden und mußten so anhand des EPROM-Inhaltes rekonstruiert werden). Bei der Disassemblierung geht man wie folgt vor: Sie benötigen eine Liste der Befehle des Mikroprozessors, "per Hand" nach Opcodes sortiert (Anhang C in KE1 für den 6809). Dort suchen Sie sich für jedes Byte heraus, um welchen Befehl es sich handelt. Anhand einer normalen Befehlsliste (Anhang B in KE1) können Sie nun die Parameter und die Länge des Befehls feststellen. Nutzen Sie ggf. weitere Tabellen (z.B. in Anhang A in KE1), um codierte Parameter-Bytes zu interpretieren. Labels setzen Sie nur dort ein, wo von einer anderen Programmstelle aus hingesprungen wird. Aussagekräftige Namen für Labels und Konstanten etc. ergeben sich natürlich erst aus dem Zusammenhang. Anhand der verwendeten Adressierungsarten und Befehle können Sie feststellen, ob es sich beim angesprochenen Speicherbereich um Daten oder Programmcode handelt. Es gibt zwar Disassembler-Programme, die Ihnen eine Menge Arbeit abnehmen können, aber das Disassemblieren bleibt dennoch eine schwierige Angelegenheit.
Die Disketten, die Sie uns schicken, müssen einen einheitlichen Aufbau haben, um uns eine "elektronische Auswertung" zu ermöglichen. Wie bereits in den "Hinweisen zur Bearbeitung" beschrieben, benötigen wir für jede Kurseinheit ein eigenes Unterverzeichnis mit Ihrer Matrikelnummer als Namen und KE<n> als Extension, wobei <n> die Nummer der Kurseinheit ist. Das Unterverzeichnis zur Kurseinheit 3 eines Studenten mit der Matrikelnummer 1234567 würde also 1234567.KE3 heißen. Auch wenn im Normalfall nur die Einsendungen zu einer Kurseinheit auf einer Diskette sein werden, benötigen wir das Unterverzeichnis.
In diesem Verzeichnis müssen die von Ihnen erstellen Programme und eine Identifikationsdatei liegen. Diese Identifikationsdatei enthält persönliche Daten wie Name, Adresse, Geburtsdatum (zur Scheinerstellung) und ggf. weitere Kontaktmöglichkeiten (Telefon, Fax, E-Mail). Die Datei muß NAMEN.DAT heißen.
Die verschiedenen Programmdateien haben folgende Namensgebung:
<Nr.><Teil>_<Typ>.ASM
Dabei ist <Nr.> die einstellige Aufgabennummer, also 1, 2, 3, ...
<Teil> ist der Buchstabe der Teilaufgabe, falls solche existieren, also A, B, C, ... bzw. nichts.
<Typ> ist "EA" für Ihre Einsendeaufgaben, "VORL" für eine von uns mitgegebene Vorlage, die Sie ergänzen und uns als "EA" zurückschicken sollen, und "ML" für Musterlösungen.
Beispiel: Zur Aufgabe 2a) werden Sie eine Datei 2A_VORL.ASM vorfinden. Diese Datei sollen Sie ergänzen und uns als 2A_EA.ASM zurückschicken. Zur Aufgabe 3) erwarten wir Ihre Datei 3_EA.ASM und werden Ihnen die Datei 3_ML.ASM mit der Musterlösung zuschicken.
Denken Sie bitte daran, alle diese Dateien in das entsprechende Unterverzeichnis Ihrer Lösungsdiskette zu kopieren.
Diese Datei hat ein einfaches Format. Eine Vorgabe sieht wie folgt aus:
Name: <hier Name eintragen> Matrikelnummer: <hier Matrikelnummer eintragen> Semester: <hier das Semester (z.B. WS95/96) eintragen> Adresse: <hier erste Adreßzeile eintragen> Adresse: <hier zweite Adreßzeile eintragen> Adresse: <hier dritte Adreßzeile eintragen> Telefon: <hier Telefonnummer eintragen> Fax: <hier Faxnummer eintragen> E-Mail: <hier die Internet-EMail-Adresse eintragen> Geburtsdatum: <hier Geburtsdatum eintragen>
Die ersten drei Einträge (Name, Matrikelnummer, Bearbeitungssemester) sind zwingend. Die Adresse geben Sie so wie auf den Einsendedeckblättern an. Telefon, Fax und E-Mail sind freiwillig und können weggelassen werden, falls gewünscht oder nicht vorhanden. Das Geburtsdatum ist wichtig, um Ihren Schein am Semesterende auszustellen.
Die Assemblerprogramme haben ein recht freies Format, welches Sie für Ihre Tests selbstverständlich nutzen können. Zur Eingabe und Bearbeitung der Assemblerdateien können Sie jeden Editor verwenden, der die bearbeiteten Dateien als ASCII-Text speichern kann, z.B. der DOS-Editor EDIT.COM oder der Editor vom Norton Commander etc.
Um eine Zeile mit einem Kommentar zu versehen, wird ein Semikolon dem Befehl in der Zeile angehängt und dahinter kann der Kommentar folgen. Um eine komplette Zeile als Kommentar zu kennzeichnen, muß an der ersten Stelle ein Stern "*" stehen, da der Assembler ein Semikolon an dieser Position nicht versteht.
Die Programme, die Sie uns schicken, müssen einen einheitlichen, etwas restriktiveren Aufbau haben, der aus einer Startzeile, dem Programmrumpf und einem abschließenden Teil besteht. Der abschließende Teil ist für alle Aufgaben identisch und enthält allgemeine Konstantendefinitionen.
Der Programmteil muß mit folgender Zeile beginnen:
ORG $0400 ;Beginn des Programmbereichs festlegen
Danach folgt das Programm, und die letzte Zeile vor dem abschließenden Teil muß lauten:
U_END ORG * ;Ende des Programmbereichs
(Für Insider: Der Befehl ORG definiert die Startadresse des folgenden Programm- oder Datenbereichs. Alle Programme müssen ab Adresse $0400 oder später anfangen. Da der GO-Befehl immer $0400 als Vorgabe benutzt, sollten Sie Ihre Programme ab $0400 beginnen lassen. Höhere Adressen sind möglich, falls Sie wissen, was Sie tun. Der Befehl U_END ORG * definiert ein Label U_END an der aktuellen Adresse. Dieses Label wird für die automatische Auswertung der Aufgaben benötigt.)
Das Programm dazwischen muß ausführlich kommentiert sein und den "üblichen" Formatregeln für Assemblerprogrammen folgen. In der ersten Spalte steht nichts oder der Beginn eines Labels. Labels können mit einem Doppelpunkt aufhören, müssen aber nicht. In der zweiten Spalte steht der Assemblerbefehl, ggf. mit Parametern. Die Parameter können auch in einer weiteren Spalte stehen. In der letzten Spalte steht, durch ein Semikolon getrennt, der Kommentar zu dem Befehl. Zur spaltenweisen Eingabe des Programms nutzen Sie bitte den Tabulator.
Dem stehen die Listings von Assemblerprogrammen gegenüber. Ein Assemblerlauf erzeugt u.a. das Listing des Eingabeprogramms. Dieses Listing entspricht dem zu übersetzenden Programm - mit drei zusätzlichen Spalten am Anfang: In der ersten Spalte steht die Zeilennummer der Assemblerdatei, die den aktuellen Befehl enthält, in der zweiten Spalte steht die Adresse des Opcodes des Befehls und in der dritten Spalte steht der Maschinenbefehl, in die der Assembler den Assemblerbefehl übersetzt hat.
Beispiele für Assemblerlistings finden Sie in Abschnitt 1.4 der Kurseinheit 1. Die von Ihnen einzusendenden Programme dürfen jedoch nicht diesem Listing-Format entsprechen, sondern dürfen nur die Spalten Label, Mnemonic (= Assemblerbefehl) und Bemerkungen enthalten. Der Assembler erzeugt daraus das Listing und fügt die drei Spalten Zeilennummer, Adresse und Opcode hinzu.
Die Unterroutine "Kennung" am Ende von Abschnitt 1.4 müßte also wie folgt aussehen, um als Lösung akzeptiert zu werden:
KENNUNG: JSR CLRDISP ;Anzeige löschen
LDX #6 ;Position für Ausgabe nach X laden
JSR SHOWB7SG ;Inhalt von B an Position X ausgeben
RTS ;Rücksprung aus der Unterroutine
Im Kurstext wird von diesem Format zum Teil abgewichen, indem - wie in Abschnitt 1.4 - ein Listing angegeben wird oder das Semikolon vor Kommentaren fehlt oder - wie in Abschnitt 1.3 - der Maschinencode hinter dem Assemblerbefehl steht o.ä. Sie sollten sich des Unterschieds zum assemblierbaren Programm bewußt sein und wissen, wie man die Beispiele des Kurstextes in ein lauffähiges Programm verwandeln könnte.
Der abschließende Teil enthält die Definitionen der Adressen (Labels) der Monitorroutinen und der Register der Hardwarebausteine. Sie können diese Labels verwenden, ohne sie jedes Mal neu definieren zu müssen, wie das z.B. oben in der Routine mit den Labels CLRDISP und SHOWB7SG gemacht wird.
Damit enthält dieser Definitionsbereich die Informationen der Tabelle in Anhang D in einem geeigneten Format. Um Ihnen vielleicht das eine oder andere Nachschlagen zu ersparen, sind die Routinen nochmals knapp kommentiert. Der Anfang der Deklarationstabelle für die Monitorroutinen sieht z.B. wie folgt aus:
* * Monitorroutinen * T7SG EQU $F100 ;Umwandlung der unteren Tetrade von B in den Sieben- * ;segmentcode, In:B, Out:A B7SG EQU $F103 ;Umwandlung beider Tetraden von B in den Siebensegment- * ;code, In:B, Out:D D7SG EQU $F106 ;Umwandlung der vier Tatraden von D in den Siebenseg- * ;mentcode, In:D, Out:D,Y
Sie können unbenutzte Konstantendefinitionen löschen, aber Sie sollten nichts hinzufügen. Falls Sie selbst Konstanten definieren möchten, schreiben Sie diese vor das Label U_END.
Wir werden Ihnen einige Dateien zur Verfügung stellen:
Wir empfehlen, sich eine individuell angepaßte Kopie der Datei NAMEN.VOR unter dem Namen NAMEN.DAT anzulegen. In dieser Kopie geben Sie Ihre individuellen Angaben (Name, Matrikelnummer etc.) an.
Falls Sie Testprogramme schreiben wollen, kopieren Sie sich die _EA.ASM in eine Datei TESTxxxx.ASM, oder nxxxx.ASM wobei xxxx eine fortlaufende Nummer Ihrer Tests und n die Aufgabennummer, auf die sich die Tests beziehen, darstellt.
Die Einsendeaufgaben können Sie auch als Kopie der _EA.ASM erzeugen. Die Namensgebung muß sich an obigen Regeln orientieren. Wir werden versuchen, bei allen Aufgaben die Dateinamen der mitgelieferten Vorlagen und der erwarteten Lösungen anzugeben.
Nun müssen Sie Ihre Programme assemblieren. Dazu rufen Sie den Assembler as9.exe mit dem kompletten Namen Ihres Programms (also mit der Extension .ASM) auf. Um ein Listing zu erhalten, geben Sie nach dem Programmnamen "-L" an. Das Listing wird jedoch nur auf dem Bildschirm angezeigt, so daß Sie - wenn Sie eine Ausgabedatei erzeugen möchten - die Ausgabe umleiten müssen, indem Sie ">" und den Namen der gewünschten Listing-Datei anhängen. Um das Programm TEST0101.ASM zu assemblieren und eine Listingdatei TEST0101.LST zu erhalten, geben Sie also ein:
as9 test0101.asm -L >test0101.lst
Nach dem Assemblerlauf werden Sie zwei neue Dateien vorfinden: Die gewünschte Listingdatei und eine Datei TEST0101.S19. Falls Sie nur die LST-Datei finden, wird diese Datei Fehlermeldungen enthalten, da der Assembler in diesem Fall Fehler in Ihrem Programm gefunden hat. Die S19-Datei ist das assemblierte Programm in einem bestimmten "genormten" Hexformat. Die Maschinenbefehle des assemblierten Programms stehen hier in einer bestimmten Codierung, mit der das Zielsystem irgendwas anfangen kann. Leider kann dieses Format (Motorola-Format S19) nicht direkt benutzt werden, so daß es erst in ein Intel-Hex-Format umgewandelt werden muß. Das geht mit dem Hilfsprogramm MOT2HEX, welches als Parameter einen Namen ohne Extension erwartet. Geben Sie also ein:
mot2hex test0101
Dann wird eine Datei TEST0101.HEX erzeugt, die Sie mit dem Terminalprogramm in den Mikrorechner laden oder im Simulator aufrufen können. Dazu mehr in Kurseinheit 2.
Um das alles etwas einfacher zu machen, ist die Batchdatei ASSEMBLE.BAT beigefügt. Sie erwartet als Parameter einen Dateinamen ohne Endung und ruft Assembler und Hexformat-Konvertierer automatisch auf. Weiterhin wird die S19-Datei gelöscht und die HEX-Datei in ein anderes Verzeichnis verschoben. Hier müssen Sie ggf. das Verzeichnis eintragen, in dem sich der Simulator oder das Terminalprogramm bei Ihnen befindet (siehe KE2). Die Batch-Datei ist sehr einfach gehalten:
as9 %1.asm -L >%1.lst mot2hex %1 del %1.s19 copy %1.hex \wrk\uni\simul\prg del %1.hex
Sie können hier selbstverständlich zusätzlich einbauen, was Sie möchten. Vielleicht schicken Sie uns ja ein paar pfiffige Erweiterungen zu?!
Wir stehen noch am Anfang der "elektronischen" Auswertung von Einsendearbeiten. Falls Sie Verbesserungsvorschläge haben, teilen Sie uns diese bitte mit.
Für die Zukunft ist eine kleine Entwicklungsumgebung geplant, die Ihnen die Verwaltungsarbeit der verschiedenen Dateien und die Erstellung der korrekten Dateinamen und -formate abnehmen kann. Die Programme können direkt assembliert werden und dann in den Mikrorechner oder an das Simulationsprogramm übertragen werden. Weiterhin werden in Zukunft der Mikrorechner und der Simulator direkt die Motorola-Hexdateien auswerten können, so daß der Umweg über die Intel-Hexdateien entfallen kann.
| Inhalt Einsendeaufgaben | Einsendeaufgaben zur Kurseinheit 1 |