HWP:Versuch 7

Aus Tudwiki
Wechseln zu: Navigation, Suche

Aufgaben von: TU Dresden Institut für Technische Informatik


Versuch 5 - Von­Neumann­Rechner

1. Versuchsziel:[Bearbeiten]

Das Verständnis für Eigenschaften und charakteristische interne Funktionsabläufe eines Von­ Neumann­Rechners soll anhand eines einfachen Beispielrechners vertieft werden.

2. Versuchsvorbereitung:[Bearbeiten]

2.1 Einführung[Bearbeiten]

Der zur Verfügung stehende Versuchsrechner (VR) ist eine Minimal­Konfiguration, bestehend aus Rechenwerk (ALU), Steuerwerk und Speicher (RAM). Außerdem ist eine externe Bussteuer­ Einheit vorhanden, mit der über Schalter der 8­bit­Adress­, der 8­bit­Daten­ 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 Bussteuer­Einheit enthält weiterhin den Taktgenerator.


Bild 1 zeigt die Grundkonfiguration des VR.

Der Rechner besitzt eine Akkumulator­Architektur, 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 ALU­Operationen 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[Bearbeiten]

Nachstehende Fragen und Aufgaben sind zu beantworten bzw. zu lösen! Sie bilden den ersten Teil des Versuchsprotokolls.

2.2.1[Bearbeiten]

Welche Adressierungsarten für Operanden werden bei den im Versuchsrechner imple­mentierten 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[Bearbeiten]

Die Register­Transfer­Befehle 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 Register­Transfer­Befehle,

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 HALT­Befehles zu interpretieren?

Lösung:

 HALT, ist für die ALU theoretisch, dass selbe wie
   MOV <M>, <M>

2.2.3[Bearbeiten]

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[Bearbeiten]

Geben Sie für das nachstehende Programmstück TEST1 die Speicherplatz­Adressen 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[Bearbeiten]

Warum ist der VR mit seiner gegebenen Flag­Ausstattung 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[Bearbeiten]

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[Bearbeiten]

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 UP­Aufruf 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.