Praktikumsanleitung (Word)

Werbung
1
WH Zwickau (FH)
FB PT/Informatik
Fachgr. Informatik
Prof. Dr.-Ing. L.Krauß
Praktikum
Informationstechnik
für STG Informatik
Compi16w.doc
word 2000
09.10.2003
Computersimulation COMPI16W
Das Praktikum soll dazu dienen, das Verständnis für die prinzipielle Arbeitsweise von
Digitalrechnern zu vertiefen.
Hauptinhalt ist die Demonstration interner Arbeitsabläufe in einem Computer. Dazu
gehören das Zusammenwirken von Prozessor, Speicher und Peripherie und vor allem der
Mechanismus der zyklischen Befehlsabarbeitung (zentrale Steuerschleife). Auf dem Monitor
des Praktikumsrechners wird dazu eine Computerarchitektur nachgebildet. Einzelne grafische
Gestaltungsmittel erlauben es, die notwendigen Abläufe bei der Abarbeitung eines mit
Assembler erstellten Programms zu verfolgen. Die Programmierung des Modellcomputers ist
zwar für die Darstellung und Verständnis der Abläufe notwendig, jedoch nicht Schwerpunkt
des Praktikums. Das Programm besteht aus den Dateien compi16.bat (Start des Programms)
und dem Java-Programm compi16.jar. Erforderlich ist die installierte JAVA-Virtual Machine.
Inhalt:
1 Der Simulator
2
1.1 Allgemeine Informationen ............................................................................................... 2
1.2 Bildschirmaufbau ............................................................................................................. 2
1.3 Bedienung des Simulators ................................................................................................ 3
Allgemeine Funktionen ...................................................................................................... 3
Funktionen zur Ablaufsteuerung ........................................................................................ 4
Funktionen zur Manipulation des Modellcomputers ......................................................... 4
2 Befehle und Befehlsausführung .......................................................................................... 5
2.1 Adressierungsarten ........................................................................................................... 5
2.2 Befehlsformat ................................................................................................................... 5
2.3 Datenformat ...................................................................................................................... 5
2.4 Befehlsübersicht ............................................................................................................... 6
2.4.1 Sprungbefehle, Steuerbefehle.................................................................................... 6
2.4.2 Arithmetische, logische, Transportbefehle, Ein-/Ausgabebefehle ............................ 7
3 Der Assembler
8
3.1 Format von Assembleranweisungen ................................................................................ 8
3.2 Pseudobefehle................................................................................................................... 9
3.3 Hinweise zu Daten ........................................................................................................... 9
3.4 Beispielprogramm .......................................................................................................... 10
3.4 Bedienung des Assemblers............................................................................................. 10
Allgemeine Funktionen .................................................................................................... 11
Funktionen zur Ablaufsteuerung ...................................................................................... 11
4 Der Linker ......................................................................................................................... 11
4.1 Bedienung des Linkers ................................................................................................... 12
Allgemeine Funktionen .................................................................................................... 12
Funktionen zur Ablaufsteuerung ...................................................................................... 13
5 Schema zur Programmerstellung für COMPI16
13
6 Aufgabenstellung und Praktikumsdurchführung
13
7 Protokoll 17
2
1 Der Simulator
1.1 Allgemeine Informationen
Unter der Karteikarte Rechner ist der Simulator des Compi16 zu finden, er stellt alle inneren
Bestandteile und einige Ein- und Ausgabe-Geräte des Modellcomputers dar.
Mit ihm werden die entwickelten Programme, die assembliert und verlinkt als *.lad Dateien
vorliegen, ausgeführt und getestet. Während der Ausführung der Anweisungen eines
Programms werden die Vorgänge im Rechner durch Animationen visualisiert.
1.2 Bildschirmaufbau
Die folgende Abbildung zeigt den Bildschirmaufbau des Rechners.
Die Komponenten des Modellcomputers haben folgende Bedeutung:
Hauptspeicher
Der Hauptspeicher des Modellcomputers ist ausschnittsweise dargestellt. Der Speicher des
Compi16 ist wortweise organisiert und umfasst 512 Speicherstellen.
Adressregister
Dieses Register enthält die Adresse der aktuellen Speicherzelle, auf die sich Speicherzugriffe
beziehen.
3
Ablaufsteuerung
Dies sind die durch Linien dargestellten Verbindungen zwischen den Komponenten, auf ihnen
wird die komplexe Ablaufsteuerung aller Prozesse stilisiert als Pfeil-Animation im
Modellcomputer dargestellt.
Tastaturpuffer
Dieses Pufferregister speichert die über Tastatur eingegebenen Zeichen (im ASCII-Code), bis
sie vom Programm gelesen werden. Der Puffer umfasst maximal 128 Zeichen.
Akkumulator
Das Akkumulatorregister des Prozessors kann maximal 15 Bit breite Daten aufnehmen. Das
16. Bit wird zur Unterscheidung von Befehlen (1) und Daten (0) verwendet.
Operandenregister
Dient bei entsprechenden Operationen als Zwischenspeicher für den zweiten Operanden.
Ergebnisregister
Dient bei entsprechenden Operationen als Zwischenspeicher für das Resultat, das dann in den
Akkumulator übertragen wird (Ausnahme CMP-Befehl).
Ergebnis- und Operandenregister sind sonst im Prozessor transparent.
Befehlsregister
Es nimmt den abzuarbeitenden Befehl auf.
BZ
Befehlszähler
ALU
Arithmetisch-logische Einheit, arithmetic-logic unit
Flags
Diese Komponente stellt die Flags des Prozessors dar.
<=>: Wenn das entsprechende Bit auf "1" gesetzt ist, so war das Ergebnis der letzten
arithmetischen Operation bzw. des CMP-Befehls kleiner, gleich oder größer Null.
E: Extension-Flag für Verschiebeoperationen
Stack und SP
Kellerspeicher mit entsprechendem Kellerzeiger, das Fassungsvermögen des Stacks beträgt
maximal 4 Worte.
Bildschirm
Display des Modellcomputers. Es umfasst 22x7 Zeichen. Der Ausgabebefehl wandelt den
ASCII-Code in das entsprechende Zeichen um.
Mode
Anzeige des aktuellen Arbeitszustandes des Modellcomputers.
1.3 Bedienung des Simulators
Die Bedienung des Simulators unterteilt sich in die Bereiche Allgemeine Funktionen,
Funktionen zur Ablaufsteuerung und Funktionen zur Manipulation des Modellcomputers.
Allgemeine Funktionen
Diese Funktionen sind über das Menü oder die Werkzeugleiste im oberen Teil des Fensters
erreichbar. Sie stellen die elementaren Funktionen zur Bedienung bereit.
Öffnen
Öffnen bzw. Laden von assemblierten und verlinkten Programmen als *.lad Datei in den
Arbeitsspeicher des Modellcomputers.
Zurücksetzen
Setzt den Modellcomputer in den Ursprungszustand zurück, d.h. es werden alle
Speicherstellen und Register auf Null gesetzt und Bildschirm und Tastaturpuffer gelöscht.
4
Mn / Bn
Ändert den Anzeigemodus des Modellcomputers, er wechselt zwischen den Modi Binär (alles
in 0 und 1 dargestellt) und Mnemonisch (Befehle werden als Wörter und Zahlen als Zahlen
dargestellt).
Hex / Dec
Wechselt im Modus Mnemonisch zwischen Dezimaler und Hexadezimaler Darstellung von
Zahlen.
Funktionen zur Ablaufsteuerung
Diese Funktionen sind im unteren Teil des Fensters zu finden und dienen der Abarbeitung des
Hauptspeichers, also geladener Programme des Modellcomputers.
RUN
Arbeitet das gesamte Programm kontinuierlich ab und beginnt dabei mit dem Befehl auf den
der Befehlszähler zeigt.
STEP
Führt einen Schritt im Programm aus, d. h. es wird das Kommando ausgeführt auf das der
Befehlszähler zeigt.
BREAK
Unterbricht die Abarbeitung eines Programms im Run-Modus, die Abarbeitung des aktuellen
Kommandos wird aber noch beendet.
SPEED
Ändert die Abarbeitungsgeschwindigkeit des Modellcomputers. Mögliche Zustände sind:
 SLOW – Animationen laufen langsam ab, zur genauen Verfolgung der Abarbeitung
 MIDDLE – Animation laufen schneller ab, sind aber noch verfolgbar.
 FAST – Es werden keine Animationen in der Abarbeitung dargestellt, die Abarbeitung
erfolgt in einem Schritt.
Funktionen zur Manipulation des Modellcomputers
Der Simulator bietet unterschiedliche Funktionen zur Manipulation des Modellcomputers.
Die erste Möglichkeit zur Manipulation ist die Änderung des Inhalts von Speicherstellen, dies
erfolgt durch Auswählen der Speicherstelle und Ändern. So ist es möglich, komplette
Programme direkt in den Hauptspeicher einzugeben. Aus didaktischen Gründen wird die
Änderung des Hauptspeichers nur im Binär-Modus erlaubt.
Ermöglicht die Änderung des jeweiligen Registers (Akkumulator oder Befehlszähler) neben
dem sich der Button befindet. Dazu wird ein separates Fenster geöffnet in dem ebenfalls aus
didaktischen Gründen das Register nur im Binärmodus geändert werden kann.
Die simulierten Ein- und Ausgabegeräte können ebenfalls manipuliert werden.
Die Verwendung des Tastaturpuffers erfolgt in dem ASCII-Zeichen direkt in das Textfeld
eingegeben werden. Der Tastaturpuffer wird von links abgearbeitet nach dem FIFO Prinzip
5
(First in First out). Er kann auch manipuliert werden z.B. durch Löschen von Zeichen in der
Mitte des Puffers.
CLEAR
Dieser Button löscht den Inhalt des jeweiligen Gerätes unter dem es sich befindet.
2 Befehle und Befehlsausführung
Der simulierte Prozessor kann verschiedene Befehle ausführen, die sich in folgende
Befehlsgruppen untergliedern lassen:
- Sprungbefehle
- Transportbefehle
- Ein-/Ausgabebefehle
- arithmetische und logische Befehle
- Steuerbefehle
Jeder Befehl belegt genau ein Speicherwort mit 16 Bit, wobei zur Unterscheidung von Daten
und Adressen das höchstwertige Bit (Bit 15) 1 ist.
2.1 Adressierungsarten
Der Prozessor unterscheidet zwei Adressierungsarten; direkte und indirekte Adressierung. Bei
der direkten Adressierung steht die Operandenadresse im Befehlswort und bei der indirekten
(im engeren Sinne) steht im Befehlswort die Adresse einer Speicherzelle, in der die
Operandenadresse zu finden ist.
2.2 Befehlsformat
15
14
1
13
12
11
10
Operationscode
9
8
7
6
In
5
4
3
2
1
0
Operandenadresse
Bit15 = 1 ist Kennzeichen für einen Befehl.
Bit 9 kennzeichnet die Adressierungsart. (0) direkt, (1) indirekt
Bei Operationen mit zwei Operanden befindet sich ein Operand im Akkumulator und der
andere im Speicher. COMPI16 ist also eine typische Einadressmaschine. Bei Befehlen ohne
notwendiger Adressangabe sind die Bits 0-8 bedeutungslos.
2.3 Datenformat
15
0
14
13
12
11
10
9
8
7
6
5
4
3
2
1
Datum
Bit15 = 0 ist Kennzeichen für ein Datum.
Für Daten stehen 15 Bit zur Verfügung, wobei das höchste Datenbit (Bit 14) das Vorzeichen
darstellt. Ist Bit 14 gesetzt handelt es sich um eine negative Zahl.
(siehe 3.3 Hinweise zu Daten)
0
6
2.4 Befehlsübersicht
2.4.1 Sprungbefehle, Steuerbefehle
Operationsname
Operationsbeschreibung
Flags
<=>
Flags
<=>
Kodierung
Sprungbefehle
JMP
unbed. Sprung zur angegeb. Adresse
00111
JGT
Sprung, wenn Größer-Flag gesetzt
001
00001
JEQ
Sprung, wenn Gleich-Flag
010
00010
JGE
Sprung, wenn Größer- od. Gleich-Flag
001
JLT
Sprung, wenn Kleiner-Flag
100
JNE
Sprung, wenn Nicht-Gleich
001
oder
100
00101
JLE
Sprung, wenn Kleiner- od. Gleich-Flag
100
oder
010
00110
oder
010
00011
00100
Unterprogrammsprünge
JSB
Sprung zum UP mit Adresse
01000
RET
Rücksprung
01001
Steuerbefehle
HLT
Halt
01011
NOP
No Operation
00000
7
2.4.2 Arithmetische, logische, Transportbefehle, Ein-/Ausgabebefehle
Operationsname
Operationsbeschreibung
Kodierung
Operation mit 2 Operanden
ADD
Addieren des Operanden zum Inhalt des Akkumulators
mit Flag-Beeinflussung
10000
SUB
Subtrahieren des Operanden vom Inhalt des Akkumulators
mit Flag-Beeinflussung
10001
AND
Bitweise UND-Verknüpfung des Operanden mit dem Inhalt vom Akku
ohne Flag-Beeinflussung
10010
IOR
Bitweise ODER-Verknüpfung des Operanden mit dem Inhalt vom Akku
ohne Flag-Beeinflussung
10011
XOR
Bitweise Exclusive-ODER-Verknüpfung
ohne Flag-Beeinflussung
11000
CMP
Vergleich zwischen Operand und Akku
nur Flag-Beeinflussung
01010
Operation mit dem Akkumulator
SHR
Rechtsverschiebung um eine Stelle
ohne Flag-Beeinflussung
10100
SRE
Rechtsverschiebung um eine Stelle durch das Extension-Flag
sonst ohne Flag-Beeinflussung
10101
SHL
Linksverschiebung um eine Stelle
ohne Flag-Beeinflussung
10110
SLE
Linksverschiebung um eine Stelle durch das Extension-Flag
sonst ohne Flag-Beeinflussung
10111
Transportbefehle
LDA
Lade den Akku mit dem Inhalt der Adresse
01100
STA
Speichere den Inhalt des Akkus auf die angegebene Adresse
01101
Ein-/Ausgabebefehle
RDA
Lies von der Tastatur ein ASCII-Zeichen ein
01110
WRA
Schreibe auf den Bildschirm ein ASCII-Zeichen
01111
8
3 Der Assembler
Der Assembler ist ein Übersetzungsprogramm für maschinenorientierte Programmiersprachen.
Er liefert ein relativ adressiertes (noch verschiebliches) Objektprogramm. Die Übersetzung
erfolgt in zwei Arbeitsgängen (Pässen). Während im ersten Pass im Wesentlichen das
Adressbuch erstellt wird, ist die Aufgabe des zweiten Passes die eigentliche Überführung des
symbolischen OPC (Operationscode) und der Adressen in den Maschinencode.
Das Objektprogramm muss noch mit dem Linker in ein abarbeitbares Programm (Lademodul)
überführt werden.
3.1 Format von Assembleranweisungen
Jede Anweisung gliedert sich in vier Felder:
[Label] Mnemocode[,I] [Operandenadresse] [;Kommentar]
Im Label- und Operandenadressfeld stehen symbolische (keine absoluten) Adressen, die
maximal sieben Zeichen lang sein dürfen. Ein Label ist dadurch gekennzeichnet, dass es in
der ersten Spalte der Zeile beginnt. Steht in der ersten Spalte ein Leerzeichen, so nimmt der
Assembler ein leeres Labelfeld an, d. h. ein einzelner Befehl ohne Label beginnt
mindestens in der zweiten Spalte. Die Felder sind durch wenigstens ein Leerzeichen zu
trennen. Der Zusatz ",I" zum mnemonischen Operationscode wird ohne Zwischenraum
angefügt und kennzeichnet indirekte Adressierung.
Label, Mnemocode und Operandenadresse können in Groß- und in Kleinbuchstaben
geschrieben werden, wobei der Assembler keinen Unterschied zwischen Groß- und
Kleinschreibung macht. Für ihn ist z.B. das Label ZYKLUS das Gleiche wie Zyklus oder
zyklus. Zur besseren Formatierung des Quelltextes können Tabs verwendet werden.
Beispiel:
ENDE
ADR1
HLT
SUB,I ADR2
;das ist ein Kommentar
Das Assemblerprogramm wird mit dem integrierten Editor geschrieben kann aber auch mit
einem üblichen Editor (UltraEdit, EDIT o.ä) erstellt werden. Die Bedienung des Editors
gestaltet sich wie mit jedem üblichen Editor und muss nicht näher erläutert werden. Die
folgende Abbildung zeigt den Editor in Aktion.
9
3.2 Pseudobefehle
Reservierung von Speicherplatz
Ein Speicherplatz besteht aus 16 Bit (ein Wort)
[Label] DEC n [;Kommentar]
Anlegen eines Speicherplatzes, der die Dezimalzahl n enthält.
[Label] HEX h [;Kommentar]
Anlegen eines Speicherplatzes, der die Hexadezimalzahl h enthält.
[Label] RST n [;Kommentar]
Es werden n aufeinander folgende Speicherplätze mit dem Inhalt Null angelegt und reserviert.
[Label1] DEF Label2 [;Kommentar]
Es wird ein Speicherplatz angelegt, der den Wert der angegebenen symbolischen Adresse
Label2 enthält.
Externe Bezüge:
EXT Label
Dem Assembler wird mitgeteilt, dass die symbolische Adresse Label in einem anderen
Quellmodul definiert ist.
ENT Label
Dem Assembler wird mitgeteilt, dass die in diesem Quellmodul definierte symbolische
Adresse auch für andere Module zur Verfügung gestellt werden soll (Pedant zu EXT).
Die Anweisungen EXT und ENT müssen am Anfang des Quellmoduls angegeben werden.
3.3 Hinweise zu Daten
Wie bereits in Kapitel 2.3 erwähnt, stehen für Daten 15 Bit zur Verfügung. Aufgrund der
Tatsache, dass das höchste Bit (Bit 14) als Vorzeichen dient, ergibt sich folgender
Wertebereich für die Daten:
DEC
HEX
DUAL
-16384
4000
100000000000000
-16383
4001
100000000000001
.
.
.
.
.
.
.
.
.
-2
7FFE
111111111111110
-1
7FFF
111111111111111
--------------------------------------0
0000
000000000000000
1
0001
000000000000001
2
0002
000000000000010
.
.
.
.
.
.
.
.
.
16382
3FFE
011111111111110
16383
3FFF
011111111111111
10
Bei der Eingabe von Hex-Zahlen im Quelltext können führende Nullen weggelassen werden
3.4 Beispielprogramm
; Dieses Programm schreibt die Buchstaben A bis F auf den Schirm.
LDA ACODE
; ASCII-Code für "A" laden
LOOP
WRA
; Zeichen auf Schirm ausgeben
CMP ECODE
; Mit Endcode vergleichen
JEQ ENDE
; wenn Endcode, dann Sprung zu ENDE
ADD EINS
; Zeichencode um eins erhöhen
JMP LOOP
; alles wiederholen
ENDE HLT
; alles paletti
ACODE DEC 65
; ASCII-Code für "A" (dezimal)
ECODE HEX 46
; ASCII-Code für "F" (hexadezimal)
EINS
DEC 1
; dezimale Eins zum inkrementieren
3.5 Bedienung des Assemblers
Die folgende Abbildung zeigt den Bildschirmaufbau des Assemblers.
In der Mitte wird der Quellcode des zu übersetzenden Programms angezeigt. Das Adressbuch
wird beim ersten Lauf und der Relative Code beim zweiten Lauf des Assemblers gefüllt.
11
Die Bedienung des Assemblers gestaltet sich intuitiv.
Allgemeine Funktionen
Die Funktionen sind über das Menü oder die Werkzeugleisten erreichbar.
Öffnen
Öffnen einer Quellcodedatei.
Speichern
Speichern der assemblierten Datei (*.rel) und der Listeningdatei (*.lst) unter dem Namen und
im Pfad der Quelldatei.
Speichern unter
Speichern der assemblierten Datei (*.rel) und der Listeningdatei (*.lst) unter neuem Namen.
Drucken
Drucken des Dokuments Listingdatei (*.lst) nach erfolgreicher Assemblierung.
Neu
Assembler zurücksetzen (Zustand ohne geöffnete Dateien).
Rückgängig
Rückgängig machen des Assemblierungsvorgangs (Zustand nach öffnen der Dateien).
Funktionen zur Ablaufsteuerung
Diese Funktionen sind im unteren Teil des Fensters zu finden und dienen der Abarbeitung der
Assemblierung.
RUN
Starten des Assemblerlaufes der im Statusfenster (rechts unten) angezeigt wird.
STEP
Schrittweise Abarbeitung des Assemblerlaufes.
SPEED
Festlegen der Assemblergeschwindigkeit in 3 Stufen: SLOW, MIDDLE, FAST (angezeigt im
Statusfenster).
4 Der Linker
Die vom Assembler erzeugten Files werden mit dem Linker in .LAD Files umgewandelt, die
vom Modellcomputer COMPI16 abgearbeitet werden können. Dazu löst der Linker externe
Bezüge auf und trägt absolute Adressen ein.
Beim Linken sind 3 Läufe notwendig, wobei die Bedienung ähnlich dem Assembler gestaltet
ist. Im ersten Lauf wird das Adressbuch für die externen Label aller Module erstellt, danach
werden die externen Bezüge aufgelöst und die Adressen für die externen Label in das
Adressbuch eingetragen. Beim dritten Lauf wird schließlich der LAD-Code erzeugt, wobei
alle relativen Adressen durch absolute Adressen ersetzt werden.
12
4.1 Bedienung des Linkers
Die folgende Abbildung zeigt den Bildschirmaufbau des Linkers.
Im Fenster werden die Geladenen Rel-Code-Dateien links unten dargestellt, in der Mitte wird
der Relative Code des zu verlinkenden Programms angezeigt. Das Adressbuch und der LAD
Code werden beim Linken gefüllt.
Die Bedienung des Linker gestaltet sich intuitiv und ähnelt der des Assemblers.
Allgemeine Funktionen
Die Funktionen sind über das Menü oder die Werkzeugleisten erreichbar.
Öffnen
Öffnen einer oder mehrerer zu linkenden Rel-Code-Dateien (*.rel).
Speichern
Speichern der gelinkten Datei (*.lad) unter dem Namen und im Pfad der Quelldatei.
Speichern unter
Speichern der Assemblierten Datei (*.lad) unter neuem Namen.
13
Neu
Linker zurücksetzen (Zustand ohne geöffnete Dateien).
Rückgängig
Rückgängig machen des Linkvorgangs (Zustand nach öffnen der Dateien).
Funktionen zur Ablaufsteuerung
Diese Funktionen sind im unteren Teil des Fensters zu finden und dienen der Abarbeitung des
Linker.
RUN
Starten des Linkerlaufes der im Statusfenster (rechts unten) angezeigt wird.
STEP
Schrittweise Abarbeitung des Linkerlaufes.
SPEED
Festlegen der Linkergeschwindigkeit in 3 Stufen: SLOW, MIDDLE, FAST (angezeigt im
Statusfenster).
5 Schema zur Programmerstellung für COMPI16
eigenes Quellmodul
Assembler
*.txt
*.REL
Linker
ASSEM.EXE
Modellcomputer
LINKER.EXE
AUS.TXT
COMPI16.EXE
ASSEM.EXE
AUS.REL
vorgegebenes Quellmodul
Lademodul
*.LAD
6 Aufgabenstellung und Praktikumsdurchführung
Alle Struktogramme und Programme sind in Vorbereitung des Praktikums zumindest
handschriftlich zu entwerfen. Während des Praktikums sind die Programme einzugeben, zu
testen, zu verbessern und nach Aufgabenstellung zu ergänzen.
6.1 Erstellen Sie ein Struktogramm für das Beispielprogramm (siehe 3.4)
6.2 Test des Beispielprogramms, Anwendung des Assemblers und Linkers
Schreiben Sie das Beispielprogramm in Assembler und testen Sie alle erforderlichen
Bearbeitungsschritte zur Erzeugung des Maschinencodes. Achten Sie besonders auf die
Arbeitsweise des Assemblers bei der Erstellung des Adressbuches und der
Maschinenbefehle. Verändern Sie das Programm so, dass die Buchstaben R bis Z bzw.
die Ziffern 0 bis 9 ausgegeben werden.
Dem Protokoll ist das übersetzte Assemblerprogramm (*.lst) anzufügen.
14
6.3 Programmierung im Maschinencode
Entwerfen Sie ein Struktogramm zur Eingabe einer Ziffer von der Tastatur in den
Hauptspeicher. Kontrollieren Sie durch das Programm, ob es wirklich eine Ziffer ist!
Erstellen Sie zum vorgegebenen Programm den Maschinencode (ohne Nutzung des
Assemblers), tragen Sie ihn direkt in den Hauptspeicher des Modellcomputers ein und
testen Sie das Programm.
Führen Sie das Programm schrittweise aus. Überlegen Sie vorher, welche Aktionen
(Datentransport, arithmetische und logische Operationen, Veränderungen in den
Registern) bei der Realisierung des einzelnen Befehls auftreten (Abfolge der „roten
Linien). Ordnen Sie die Vorgänge den Bestandteilen der zentralen Steuerschleife
(Befehlszyklus) zu. Protokollieren Sie einige interessante Befehle (siehe 7.1).
6.4 Eingabe und Ausgabe einer Ziffer (1. Baustein für das Multiplikationsprogramm)
Schreiben Sie das unter 6.3 geforderte Programm in Assembler (Dateiname: eingzif.txt).
Ergänzen Sie Ihr Struktogramm und Programm zur Ausgabe dieser Ziffer (einaus.txt)
auf den COMPI16 Bildschirm. Dem Protokoll ist das übersetzte Assemblerprogramm
(einaus.lst) anzufügen.
6.5 Kontrollfragen und Testauswertung
Geben Sie die Lösungen der folgenden Aufgaben im Protokoll an.
 Leiten Sie die Aufgaben eines Assemblers aus den Versuchen 6.2 bis 6.4 ab.
 Beobachten Sie, wie der Mustercomputer einen Sprung realisiert. Entwickeln Sie eine
logische Schaltung (AND, OR, Negation), die diesen Vorgang für den Befehl JMP
LOOP realisiert.
 Wie würde sich die Schaltung für den Befehl JEQ ENDE ändern?
6.6 Addition zweier Konstanten (2. Baustein für das Multiplikationsprogramm)
Entwerfen Sie ein Struktogramm zur Addition zweier im Hauptspeicher vorhandener
Konstanten. Schreiben Sie das Programm ( Dateiname: add.txt) und testen Sie es.
Erweitern Sie das Programm durch die Eingabe und die Ausgabe von Ziffern (addok.txt)
falls das Ergebnis nur eine einstellige Zahl ist. Nutzen Sie dazu Ihre Programme
eingzif.txt und einaus.txt. Dem Protokoll sind die übersetzte Assemblerprogramme
(*.lst) anzufügen.
6.7 Multiplikation zweier Konstanten (3. Baustein für das Multiplikationsprogramm)
Entwerfen Sie ein Struktogramm zur Multiplikation zweier im Hauptspeicher
vorhandener Konstanten. Schreiben Sie das Programm ( Dateiname: mult.txt) und
testen Sie es. Dem Protokoll ist das übersetzte Assemblerprogramm (*.lst) anzufügen.
6.8 Multiplikation und Addition
Für die folgende Aufgabe sind Struktogramm und Programm (praufg.txt) zu erarbeiten.
Dabei sind die bisher erarbeiteten Struktogramme und Programmbausteine zu nutzen
und möglichst wenig neu zu schreiben.
Es sind zwei Ziffern (A und B) von Tastatur einzulesen und über die Operation
x*A+y*B arithmetisch zu verknüpfen. X und Y sind ganze Zahlen und werden nach
Fertigstellung des Programms zum Test jeder Gruppe vom Betreuer genannt. Das
Ergebnis liegt im Intervall von 0 bis 99. Die Aufgabenlösung umfaßt zwei Quellmodule,
wovon eins vorgegeben ist und den Programmteil Ergebnisausgabe beinhaltet. Der
Quelltext dieses Moduls ist unten angeführt. Die Ausgaberoutine für die zweistellige
Zahl ist ein Unterprogramm mit dem Namen UPAUS, das im Modul AUS.TXT
definiert ist. Die auszugebende Zahl ist im Akkumulatorregister zu übergeben. Der
15
Akkumulator-inhalt wird im Unterprogramm verändert. Das Quellmodul, das die
Eingabe und die arithmetische Operation umfaßt, ist von jeder Praktikumsgruppe selbst
zu erstellen. Anschließend sind beide Module zu assemblieren und zu linken. Beim
Linken ist darauf zu achten, daß der Modul AUS.REL als zweiter eingebunden wird.
Das Ausgabefile trägt dann den Namen des selbst geschriebenen Moduls. Dem
Protokoll ist das übersetzte Assemblerprogramm (*.lst) anzufügen.
Testen Sie das Programm.
Quelltext des Moduls AUS.TXT
ENT
AUS1
LDA,I TAB
WRA
LDA TABMERK
ADD Zahl
STA TAB
LDA,I TAB
WRA
RET
;symb. Adresse UPAUS auch in anderen Modulen bekannt
;machen
;Akkumulator speichern
;Anfangsadresse der Tabelle holen
;und zur weiteren Berechnung ablegen
;auszugebende Zahl im Akkumulator laden
;Test ob Zahl kleiner als Zehn ist
;ja, also Sprung zum Ausgeben
;nein noch größer als Zehn, also zykl. Zehn abziehen
;dabei Tabellenzeiger erhöhen
;Tabellenzeiger holen
;Zeiger auf nächste Ziffer setzen
;veränderten Zeiger wieder abspeichern
;Zahl holen
;Zehn abziehen
;und wieder abspeichern
;diesen Zyklus solange ausführen, bis Zahl kleiner als Zehn ist
;Ausgabe
;über Tabellenzeiger auszugebenden ASCII-Code holen
;ASCII-Code der Zehnerstelle ausgeben
;Anfangsadresse der Tabelle holen
;Tabellenzeiger um Wert der Einerstelle erhöhen
;Tabellenzeiger für indir. Adressierung speichern
;über Tabellenzeiger auszugebendes Zeichen (ASCII) holen
;ASCII-Code der Einerstelle ausgeben
;Finales Return
Zahl
EINS
ZEHN
TAB
TABMERK
TABANF
RST
1
DEC
1
DEC
10
RS
1
DEF TABANF
HEX
30
HEX
31
HEX
32
HEX
33
HEX
34
HEX
35
HEX
36
HEX
37
;Definitionen
;Speicher für auszugebende Zahl
;dezimale Eins für Zeigerrechnungen
;dezimale Zehn für Abtrennung der Zehnerstelle von Zahl
;Speicherzelle für Tabellenzeiger
;Ablage für Tabellenanfangsadresse
;Tabelle der ASCII-Codes der Ziffern von Null bis Neun
;ASCII-Code von Eins
;ASCII-Code von Zwei
;ASCII-Code von Drei
;ASCII-Code von Vier
;ASCII-Code von Fünf
;ASCII-Code von Sechs
;ASCII-Code von Sieben
UPAUS
ZYKL1
UPAUS
STA ZAHL
LDA TABMERK
STA TAB
LDA ZAHL
CMP ZEHN
JLT
AUS1
und
LDA
ADD
STA
LDA
SUB
STA
JMP
TAB
EINS
TAB
ZAHL
ZEHN
ZAHL
ZYKL1
16
HEX
HEX
38
39
;ASCII-Code von Acht
;ASCII-Code von Neun
6.9 Kontrollfragen und Testauswertung
Geben Sie die Lösung der folgenden Aufgabe im Protokoll an.
 Leiten Sie die Aufgaben eines Linkers aus dem Versuchen 6.8 ab.
6.10 Zusatzaufgabe: Ausgabe dreistelliger Zahlen
Erweitern Sie das Programm AUS.TXT zur Ausgabe dreistelliger Zahlen und testen Sie
das Programm. Dem Protokoll ist das übersetzte Assemblerprogramm (*.lst) anzufügen.
6.11 Zusatzaufgabe: Unterprogrammtechnik
Realisieren Sie die Aufgabe 6.8 mittels Unterprogrammen. Dem Protokoll ist das
übersetzte Assemblerprogramm (*.lst) anzufügen.
17
7 Protokoll
7.1 Protokollierung eines Programm-Bausteins
Je Praktikumsgruppe ist ein Protokoll nach folgendem Muster zu erstellen. Der
Programmlauf des Quellmoduls einaus.txt ist im Schrittbetrieb zu protokollieren und zu
diskutieren. Es ist darauf zu achten, daß bei der Eingabeschleife jeder mögliche
Programmzweig zu durchlaufen ist! Erarbeiten Sie sich eine Prüfstrategie! Wieviel
verschiedene Eingaben sind dazu mindestens erforderlich?
Beim Protokollieren des Akkumulatorinhalts brauchen führende Nullen nicht notiert werden.
Die Bemerkungen sollen das Problem kommentieren und nicht den vorn stehenden Befehl!
prokopf.doc
Ablaufprotokoll
Anfangsbedingungen: z.B.: Inhalt des Tastaturpuffers, Konstanten im Hauptspeicher usw.
<BZ>alt
| <BR>neu | <BZ>neu | <A>dez | <F>bin | Bemerkungen
| mnemonisch |
|
| <=>E |
dez
| dez
| dez
| nach Abarb.von BZalt |
----------------------------------------------------------------------------------------------------Bsp.
|
|
|
|
|
19
| SUB 012
| 20
| 34
| 0011 |Korr. Wert2
20
| JMP 15
| 15
| 19
| 0010 |Eing. Schleife
7.2 Protokollierung der indirekten Adressierung
Im vorgegebenen Quellmodul (AUS.TXT) der die Ausgabe enthält, ist ein Befehl mit
indirekter Adressierung vorhanden. Dieser Befehl ist im Langsamlauf abzuarbeiten. Der
detaillierte Ablauf dieses Befehls ist im Protokoll festzuhalten und zu beschreiben. Die
Unterschiede zu Befehlen mit direkter Adressierung sind vorzuheben.
Beschreiben Sie in wenigen Sätzen den Grundgedanken des Algorithmuses des Programms
AUS.TXT. Erarbeiten Sie sich das Struktogramm für das Programm AUS.TXT.
7.3 Zusatzaufgabe Unterprogrammtechnik
Der Programmablauf des unter Punkt 6.11 erstellten Programms ist bei einem Sprung in das
Unterprogramm und bei einem Rücksprung zum Hauptprogramm zu protokollieren. Ergänzen
Sie dabei Ihr Protokoll mit Angaben zu Stack-Pointer und dem Stackspeicher.
18
Ablaufprotokoll
Anfangsbedingungen:
<BZ>alt | <BR>neu | <BZ>neu | <A>dez | <F>bin | Bemerkungen
|mnemonisch|
|
| <=>E |
dez | dez
| dez
| nach Abarb.von BZalt |
----------------------------------------------------------------------------------------------------------------|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Herunterladen