HWP:Versuch 7
Aufgaben von: TU Dresden Institut für Technische Informatik
Versuch 5 - VonNeumannRechner
Inhaltsverzeichnis
1. Versuchsziel:
Das Verständnis für Eigenschaften und charakteristische interne Funktionsabläufe eines Von NeumannRechners soll anhand eines einfachen Beispielrechners vertieft werden.
2. Versuchsvorbereitung:
2.1 Einführung
Der zur Verfügung stehende Versuchsrechner (VR) ist eine MinimalKonfiguration, bestehend aus Rechenwerk (ALU), Steuerwerk und Speicher (RAM). Außerdem ist eine externe Bussteuer Einheit vorhanden, mit der über Schalter der 8bitAdress, der 8bitDaten und ausgewählte Leitungen des Steuerbusses extern belegt, bzw. über LED’s zur Anzeige gebracht werden kön nen. Nur über diese Einheit ist es möglich, Programme und Daten von außen in den Speicher ein zuschreiben. Der Rechner verfügt über keine Ein/ Ausgabeeinheit. Die BussteuerEinheit enthält weiterhin den Taktgenerator.
Bild 1 zeigt die Grundkonfiguration des VR.
Der Rechner besitzt eine AkkumulatorArchitektur, die durch ein Zusatzregister L erweitert ist. Dieses Register kann sowohl zur Speicherung von Operanden als auch zur Speicherung von Adressen bei der indirekten Adressierung von Operanden im Hauptspeicher benutzt werden. Es ist ohne Einbeziehung der ALU inkrementierbar und dekrementierbar. Der Akkumulator A ist bei allen ALUOperationen das Quellregister für den 1.Operanden und das Zielregister für das Ergebnis. Das Flagregister umfaßt das Vorzeichenflag (S), das Nullflag (Z) und das Übertragsflag (C). Die Flags werden durch In und Dekrementieren von L nicht beeinflusst! Der Befehlssatz umfasst insgesamt 57 Befehle (Befehlsliste siehe Anhang).
2.2 Vorbereitungsaufgaben
Nachstehende Fragen und Aufgaben sind zu beantworten bzw. zu lösen! Sie bilden den ersten Teil des Versuchsprotokolls.
2.2.1
Welche Adressierungsarten für Operanden werden bei den im Versuchsrechner implementierten arithmetischen Befehlen angewendet (siehe Befehlsliste im Anhang)?
Führen Sie für jede Adressierungsart ein Beispiel auf!
Lösung:
Addr-Art Beispiel Erklärung ----------+----------+--------------- Register ADD A A wird im Prozessor addressiert Immediate ADI n Wert wird direkt im Code übergeben Direkt ADD adr addresse wird direkt angeben (gibt's in dem VR nicht) Indirekt ADD <M> Über Addresse L
2.2.2
Die RegisterTransferBefehle haben beim Versuchsrechner folgendes Format:
Bit7, Bit6: Operationskode, Bit5, Bit4, Bit3: Registeradresse des Zielregisters, Bit2, Bit1, Bit0: Registeradresse des Quellregisters. Ermitteln sie aus der Befehlsliste
a) Operationskode der RegisterTransferBefehle,
Lösung:
01b für MOV-Befehl 00b für MVI/LD/ST-Befehle
b) Registeradresse von A und L.
Lösung:
111b für Register A 101b für Register L
c) Welche Bitkombination steht für die indirekte Adressierung des Speichers im Be fehl MOV A, M ?
Lösung:
110b des Quell-Registers steht für die indirekte Addressierung
d) Wie ist die Kodierung des HALTBefehles zu interpretieren?
Lösung:
HALT, ist für die ALU theoretisch, dass selbe wie MOV <M>, <M>
2.2.3
Die Vergleichsbefehle CMP werden intern durch eine Subtraktion <A> <x> ohne Beeinflussung des Akkumulators A realisiert.
Wie kann das Vergleichsergebnis (>, =, <) aus der Flagbelegung erkannt werden, wenn die Zahlen als vorzeichenlose Festkommazahlen interpretiert werden?
Lösung:
Zero=1 ==> <A> = <x> Carry=1 ==> <A> < <x> Zero=Carry=0 ==> <A> > <x>
2.2.4
Geben Sie für das nachstehende Programmstück TEST1 die SpeicherplatzAdressen für
die einzelnen Befehle an (Beginn bei 10H). Tragen Sie in die Tabelle die Adressen, den Maschinenkode (hexadezimal) sowie die jeweilige Belegung der Register A und L sowie der Flags nach Ausführung des jeweili gen Befehls ein.
Lösung:
Befehl Sp.Adr. HEX Mnemonic Reg. A Reg. L S Z C ---------+--------+------------+--------+--------+------- * * * * * 10H, 11H 3E, 03 MVI A,03H 03H * * * * 12H 3D DEC A 02H * 0 0 0 13H 00 NOP 02H * 0 0 0 14H, 15H EE, F1 XRI F1H F3H * 1 0 0 16H, 17H 2E, 1F MVI L,1FH F3H 1FH 1 0 0 18H 85 ADD L 12H 1FH 0 0 1 19H 6F MOV L,A 12H 12H 0 0 1 1AH 6E MOV L,M 12H 3DH 0 0 1 1BH, 1CH C3, 10 JMP 10H
Alternative Lösung:
... 1AH 6E MOV L,M 12H M 0 0 1 1BH, 1CH C3, 10 JMP 10H 12H M 0 0 1
Tabelle 1: Programm TEST1
2.2.5
Warum ist der VR mit seiner gegebenen FlagAusstattung für das Rechnen mit vorzeichenbehafteten Festkommazahlen nur bedingt geeignet?
Lösung:
Weil ein Überlauf nicht richtig erkannt werden kann. z.B. add 100, 100 => -56 (Fehler kann nicht nachvollzogen werden) Es fehlt das Overflow-Flag, welches diese Art Überlauf für vorzeichenbehaftete Zahlen anzeigt.
2.2.6
Schreiben Sie ein für den VR ausführbares Programm DIV_3, mit dem eine im Register A stehende positive Zahl ($ 0 \leq n \leq 250 $) durch 3 ganzzahlig geteilt wird. Das Ergebnis soll am Ende in A stehen, der Divisionsrest ist ohne Interesse.
Lösung:
Befehl Sp.Adr. HEX Mnemonic ---------+--------+------------ 40H, 41H 2E, FF MVI L, FFH 42H, 43H D6, 03 SUI 03H 44H 2C INC L 45H, 46H D2, 42 JNC 42H 47H 7D MOV A, L 48H C9 RET
Tabelle 2: Programm DIV_3
2.2.7
Für eine weitere Verarbeitung seien Messwerte ($ 0 \leq m \leq 250 $) im Speicher ab Adresse 51H abgelegt. Die Anzahl n der zu verarbeitenden Messwerte steht unter der Adresse 50H ($ 1 \leq n \leq 15 $).
a) Schreiben Sie ein Programm AUSW, in dem zu jedem Messwert jeweils der Wert 5 addiert und danach die Summe durch 3 ganzzahlig dividiert wird. Die umgeformten Messwerte (ganze Zahlen ohne Rest) sollen auf die jeweils glei chen Speicherplätze zurückgeschrieben werden. Zur Realisierung der Division ist das Programm DIV_3 aus Aufgabe 2.2.6 als Un terprogramm aufzurufen. Achten Sie darauf, dass bei UPAufruf keine relevanten Daten im Hauptprogramm verloren gehen. Zur Datensicherung kann der Stackbe reich genutzt werden.
Lösung:
Befehl Sp.Adr. HEX Mnemonic ---------+--------+------------- 60H, 61H 31, FF MVI SP, FFH 62H, 63H 2E, 50 MVI L, 50H 64H 7E MOV A, <M> 65H 2C INC L 66H F5 PUSH A 67H E5 PUSH L 68H 7E MOV A, <M> 69H, 6AH C6, 05 ADI 05H 6BH, 6CH CD, 40 CALL 40H 6DH E1 POP L 6EH 77 MOV M, A 6FH F1 POP A 70H 3D DEC A 71H, 72H C2, 65 JNZ 65H
b) Der Stackpointer soll zu Beginn des Hauptprogramms mit dem Wert FFH initiali siert werden. Auf welchem Speicherplatz erfolgt dann der 1. Eintrag in den Stack Bereich?
Lösung:
Erster Wert wird an Speicheraddresse FEH gespeichert. Das Programm soll mit der Adresse 60H, das Unterprogramm mit 40H starten.