Technische Informatik

Musterlösung Grundlagen der Datenverarbeitung/ Technische Informatik 23.9.03 Machen Sie bitte zu Beginn der Klausur hier unten die notwendigen Angaben...
Author: Falko Lorenz
8 downloads 0 Views 381KB Size
Musterlösung Grundlagen der Datenverarbeitung/ Technische Informatik 23.9.03 Machen Sie bitte zu Beginn der Klausur hier unten die notwendigen Angaben. Lösen Sie nicht die Heftung der Klausur. Wenn Sie die Heftung lösen, müssen Sie jedes Blatt oben mit Namen und Matrikelnummer versehen, und wir übernehmen keine Verantwortung für evt. verloren gegangene Blätter. Reicht Ihnen der Platz nicht, benutzen Sie die leeren Rückseiten. Bemühen Sie sich bitte um Eindeutigkeit und deutliche Lesbarkeit Ihrer Antworten. Das letzte Blatt enthält den Befehlssatz. Es ist sinnvoll, dass Sie den Befehlssatz ohne Blättern vor Augen haben, wenn Sie die Programmieraufgabe lösen. Sobald Sie an der entsprechenden Stelle sind, sollten Sie das letzte Blatt vorsichtig abreißen, damit Sie es geeignet verwenden können. Beachten Sie, dass es eine gute Prüfungsstrategie ist, die Punktzahl, die rechts neben der Bezeichnung der Gesamtaufgabe angegeben wird, als Minutenäquivalent zu behandeln. Versuchen Sie, die Bearbeitungszeit der Aufgabe auf dieses Minutenäquivalent zu beschränken. Damit können Sie ein „Verbeissen“ in eine Aufgabe vermeiden, was in aller Regel zum Misserfolg führt. 1. Zahlensysteme 2. Schaltalgebra 3. Codierung 4. Schaltwerksynthese 5. Schaltwerkanalyse 6. Programmierung

35 35 35 50 50 35 240

Name Vorname Matrikelnr.:

108 0

Unterschrift

1

1. Zahlensysteme

35

1.1 Vergleichen Sie die positiven Zahlen X und Y und stellen Sie durch die Bildung der dualen Differenz X – Y fest, welche die größere ist. X = 12,75|8 Y = A,9|16

-

1010,111101 1010,1001 0000,011001

X>Y

4 Stellen Sie X und Y zur Basis 4 dar.

X = 22.331|4 Y = 22.21|4

2 1.2 Stellen Sie X und Y als normalisierte Gleitpunktzahl in folgendem Format dar: xxxx. x.xxxx xxxx 2 , Mantisse und Exponent im 2-Komplement 0 X = 1010.111101 · 2 4|10 = 0.1010111101 · 2 0100 = 0.10101111 · 2 Y

·2

0

=

1010.1001

=

0.10101001

·2

=

0.10101001

·2

4|10

0100 4 2

Bilden Sie die Summe X + Y in diesem Format.

+

0.10101111

0100

·2

0100 0.10101001 · 2 0100 1.01011000

·2

0101

=

0.10101100

·2 3

1.3 Geben Sie die charakteristischen Merkmale des zugelassenen Zahlenbereiches für das Format in Potenzschreibweise an. xxxx x.xxxx xxxx 2 , Mantisse und Exponent im 2-Komplement größte pos. Zahl

kleinste pos. Zahl ≠ 0

größte neg. Zahl

kleinste neg. Zahl

(1 – 2

2

-8

-2

-8

)·2

7

· 2 -8

-8

· 2 -8

-1·2

7

7 Addieren Sie dual die größte positive zur kleinsten positiven Zahl (ungleich Null), die für dieses Format gelten. Die Ergebnis-Mantisse soll so viele Stellen haben, wie für das genaue Ergebnis notwendig sind.

3

·2

0.1111 1111

+

0.0000 0001

0111 1000

·2

=

+

0111

1111 0000 0000 0000 000

·2

0.0000 0000 0000 0000 0000 001

·2

0.1111 1111 0000 0000 0000 001

·2

0.1111

0111 0111 6

Wie groß ist der Abrundungsfehler als Potenz von 2, wenn Sie das Ergebnis im gegebenen Format ausdrücken? -16

2

2 Multiplizieren Sie in Potenzschreibweise die (in diesem Format) größte positive Zahl mit der (in diesem Format) kleinsten positiven Zahl (ungleich Null). (1 – 2 = (1 – 2 = (1 – 2

-8

)·2

7

-8

)·2

-9

-8

)·2

-1

· 2 -8 · 2 -8 · 2 -8 2

Wie lautet das Multiplikationsergebnis, wenn es mit dem (in diesem Format kleinst möglichen) Genauigkeitsverlust dargestellt würde? normalisiert, aber nicht darstellbar: 0.1111 1111 darstellbar nur mit Abrundungsfehler: 0.0111 1111 (1)

2 2

-9|10 1000|2 3

Wie groß ist dabei der Abrundungsfehler, wenn Sie das Ergebnis im gegebenen Format ausdrücken? -9

2

· 2 -8 = 2 -17 2 4

2. Schaltalgebra

35

2.1 Formen Sie die folgende Funktion schaltalgebraisch so um, dass sich eine minimale Schaltfunktion ergibt (Ergebnis muss die Länge 1 haben). y= b ac a b bc = b ac +a b bc = b + a c + (a + b) (b + c ) = b + ac + ab + ac +bb +bc = b+ ac + ab +bc = b+ ac + ab

b+ab

=ab+ a b+a b =a+b

= a+b+ac =a+b

8 5

2.2 Gegeben ist folgende Funktion: y = a b a (b + d) Die Funktion soll unter Verwendung von NAND-Gattern mit zwei Eingängen realisiert werden. Formen Sie die Funktion schaltalgebraisch so um, dass sie die NANDVerknüpfungen direkt enthält.

= ab a b+d

= ab a b d

= ab a b d

Geben Sie mit den üblichen Symbolen die Schaltung an.

Oder eine andere Lösung, die sich bei Minimierung ergibt.

8 6

2.3 Geben Sie die Schalttabelle für folgende Funktion an: y = a ≡/ b ≡/ c Ob Sie unten alle Spalten brauchen, hängt von Ihrer Lösungsstrategie ab.

y=a≡b≡c

a

b

c

a≡b

a≡b≡c

0

0

0

1

0

0

0

1

1

1

0

1

0

0

1

0

1

1

0

0

1

0

0

0

1

1

0

1

0

0

1

1

0

1

0

1

1

1

1

1 4

Geben Sie die minimale disjunktive Normalform an.

y = a b c+ a bc + ab c + abc

2 7

2.4 Eine Schaltfunktion soll immer dann 1 sein, wenn a = b = c ist. Geben Sie die Schaltfunktion in disjunktiver Normalform an.

y=abc+ abc 2 Geben Sie die Schaltfunktion in minimaler konjunktiver Normalform an. Das KV-Diagramm von y ist

b a

1

1

0

1

1

1

1

0

c

y = a c + b c + a b oder b c + a b + a c y = (a + c) (b + c ) (a + b ) oder (b + c) (a + b) (a + c ) 7

2.5 Geben Sie die minimale disjunktive Normalform für folgendes KV-Diagramm an. X = dont care

b a

0

1

1

x

1

0

0

1

1

0

0

1

1

1

1

c

d

y = cd +c d+b d 4

8

3. Codierung

35

3.1 Ein Bus überträgt Daten von 64 Bit. Die Übertragung soll 1-Fehler-erkennbar gemacht werden. Welches Codierungsverfahren (mit kleinst möglicher Redundanz) bietet sich an? Codierung mit Parität Wie viele Prüfbits sind dafür notwendig? 1 Wie groß ist die Redundanz des Codes? 1 2

3.2 Ein Bus überträgt Daten von 64 Bit. Die Übertragung soll 1-Fehler-korrigierbar gemacht werden. Welches Codierungsverfahren (mit kleinst möglicher Redundanz) bietet sich an? Hamming-Codierung Wie viele Prüfbits sind dafür notwendig? (rechnerische Antwort)

n = Anzahl der Bits im Codewort, k = Anzahl der Datenbits, n-k = Anzahl der Prüfbits 2 n-k -1 > k + n-k 2 n-k > 1 + 64 + n – k n-k = 7 ist der kleinste ganzzahlige Wert, der die Ungleichung erfüllt 3

Der Code soll als x-Fehler-erkennbarer Code beschrieben werden. Wie groß ist x?

x=2 2

Geben Sie ein alternatives Codierungsverfahren mit den gleichen Leistungsmerkmalen (für die Erkennung und Korrektur von Fehlern) an.

Codierung mit Blockbildung und zeilen- und spaltenweiser Paritätscodierung Wie viele Prüfbits braucht man mindestens bei diesem Verfahren, wenn man ein 64Bit-Wort sichern will? (Lösungsweg erkennbar machen)

Anzahl der Zeilen-Prüfbits 2 4 8 mindestens 17 Prüfbits

· · ·

·

Anzahl der Spaltenprüfbits = 64

32 ergibt 2 + 32 +1 Prüfbits 16 ergibt 4 + 16 +1 Prüfbits 8 ergibt 8 + 8 +1 Prüfbits 4

9

3.3 Geben Sie eine gültige Kontrollmatrix für einen nicht-systematischen (12,8)Hamming-Code an und markieren Sie die Positionen der Prüfbits mit ihren Stellengewichten.

23 0 0 0 0 0 0 0 1 1 1 1 1

22 0 0 0 1 1 1 1 0 0 0 0 1

21 0 1 1 0 0 1 1 0 0 1 1 0

20 1 0 1 0 1 0 1 0 1 0 1 0

p0 p1 i1 p2 i2 i3 i4 p3 i5 i6 i7 i8 4

Geben Sie die schaltalgebraische Funktion zur Erzeugung des Prüfbits mit dem Stellengewicht 23an.

p3= i5 ≡/ i6 ≡/ i7 ≡/ i8 3

Angenommen, man überträgt in den 8 Datenbits die Hexazahl FF|16. Wie lautet das Codewort?

p0

p1

i1

p2

i2

i3

i4

1 1 p0 0 1 0 1 Anzahl 1en = 5, d.h. p0 = 1

1 0

1 1

1 1 p1 1 0 0 Anzahl 1en = 5, d.h. p1 = 1

1 1

1 1

1

1 p2 1 Anzahl 1en = 4, d.h. p2 = 0

1 1

1 1

1

1

1

1

Anzahl 1en = 4, d.h. p3 = 0

p3

i5

i6

i7

i8

0

1 1

1 0

1 1

1 0

0

1 0

1 1

1 1

1 0

0

1 0

1 0

1 0

1 1

p3

1 1

1 1

1 1

1 1 7

10

Angenommen, man zählt die Datenbits von links nach rechts aufsteigend ab 1 und im dritten Datenbit ändert sich durch einen Übertragungsfehler der Bitwert. Welches Syndrom entsteht im Empfänger? Zeigen Sie im Muster eines Codewortes die Position, die Sie annehmen. Die Stellengewichte im Syndrom müssen denen in der Kontrollmatrix oben entsprechen.

p0

p1

i1

p2

i2

i3 x

i4

p3

i5

i6

i7

i8

x steht an der 6. Stelle im Codewort, also ergibt sich das Syndrom:

(s0, s1, s2, s3) = (0, 1, 1, 0) 3 Geben Sie (begründet) einen Dreifachfehler an, der den Syndromwert 0 erzeugt, also nicht erkannt wird.

Als Beispiel kann man den Fehler an der 6.Stelle nehmen. Wenn zusätzlich die Paritätsbits p1 und p3 kippen, entsteht in jeder dazugehörigen Prüfgleichung die Antivalenz-Verknüpfung mit einer weiteren 1, d.h. die Syndrom-Werte, die bei dem Einfachfehler eine 1 ergeben, werden zu 0: es entsteht das Syndrom (0, 0, 0, 0). Der Dreifachfehler wird nicht bemerkt. 4

3.4 Geben Sie die schaltalgebraische Funktion zur Erzeugung des Prüfbits mit dem Stellengewicht 23 für den systematischen (12, 8)- Hamming-Code an.

p3= i5 ≡/ i6 ≡/ i7 ≡/ i8

3

11

4. Schaltwerksynthese

50

4.1 Die Zustandsübergänge, die das Übergangsschaltnetz eines Schaltwerkes ausführen soll, werden durch folgendes Zustandsübergangsdiagramm beschrieben.

0

1

2

3

4

5

6

7

Diese Zustandsfolge soll mit einem synchronen Schaltwerk mit D-Flip-Flops realisiert werden. Geben Sie die Schalttabelle des Übergangsschaltnetzes an. Bezeichnen Sie zuerst deutlich die unabhängigen und abhängigen Schaltvariablen, bevor Sie die Tabelle füllen.

S2n S1n

S0n S2n+1 S1n+1 S0n+1

0

0

0

0

0

1

0

0

1

0

1

1

0

1

0

0

0

0

0

1

1

1

0

1

1

0

0

0

1

0

1

0

1

1

1

1

1

1

0

1

0

0

1

1

1

1

1

0 4

Bestimmen Sie die Schaltfunktionen für die Eingangsvariablen der D-Flip-Flops in minimaler disjunktiver Normalform.

S2n+1 = S2n S1n + S2n S0n + S1n S0n S1n+1= S2n S1n + S2n S0n + S1n S0n S0n+1 = S2n S1n + S2n S0n + S1n S0n

6

12

Nun soll ein Ausgabeschaltnetz ergänzt werden, das zwei Ausgabevariable Y1 und Y2 erzeugt. Es soll vier Takte lang Y1 = 1 und Y2 = 0 gelten, danach vier Takte lang Y1 = 0 und Y2 = 1. Das soll sich zyklisch wiederholen. Geben Sie das Schema des Schaltwerksmodells an. Spezifizieren Sie darin nur die Schaltung des Ausgabeschaltnetzes mit den üblichen Schaltsymbolen.

5

4.2 Ein Schaltwerk soll von außen gesteuert alternativ folgende beiden Zustandsfolgen durchlaufen.

0

1

2

3

4

5

6

7

Die Zustandsfolge soll mit einem synchronen Schaltwerk mit D-Flip-Flops realisiert werden. Die Dezimalzahlen zur Zustandskennzeichnung sollen als gleichwertige Dualzahlen realisiert werden. Geben Sie die Schalttabelle des Übergangsschaltnetzes an. Bezeichnen Sie zuerst deutlich die Schaltvariablen, bevor Sie die Tabelle füllen.

Es soll gelten: steuernde Schaltvariable E = 0 : Folge mit steigenden Werten steuernde Schaltvariable E = 1 : Folge mit fallenden Werten Füllen Sie zunächst die Schalttabelle gemäß der Definition des Graphen aus. 13

E

S2

0

n

n

S1

S0

0

0

0

0

0

0

0

0

0

n

S2

n+1

n+1

S1

S0

0

0

1

1

0

1

1

1

0

0

1

1

0

1

1

1

0

1

0

1

0

0

1

0

1

0

1

0

1

1

1

1

0

1

1

0

1

1

1

0

1

1

1

0

0

1

1

0

0

0

1

1

0

1

0

0

1

0

0

0

1

0

1

0

0

0

0

1

0

1

1

0

1

0

1

1

0

0

0

1

0

1

1

0

1

1

0

0

1

1

1

0

1

0

0

1

1

1

1

1

1

0

n+1

J2n K2n J1n K1n J0n K0n 0

x

0

x

1

x

x

0

x

0

1

x

x

1

1

x

0

x

5

Beachten Sie nun folgende Festlegungen: Die Umschaltung der Steuervariablen geschieht zwischen den wirksamen Taktflanken so, dass der Folgezustand eingestellt ist, bevor die nächste Taktflanke erfolgt. Der Folgezustand nach dem Umschalten ist immer der, der den Wert mit der (in der neuen Richtung) kleinsten Distanz hat. Prüfen Sie jeden Zustand auf seine Umschalteigenschaften und ergänzen Sie die fehlenden Übergänge. Sie können sich die fehlenden Übergänge mit Hilfe des folgenden Diagramms überlegen und dort eintragen, bevor Sie die Tabelle ergänzen, oder es direkt versuchen.

0

1

2

3

4

5

6

7

7

14

In der Tabelle gibt es vier Zeilen, die rechts ergänzt wurden. Angenommen, das Schaltwerk wird nicht mit D-Flip-Flops, sondern mit JK-Flip-Flops realisiert. Dann muss das Übergangsschaltnetz die Steuereingänge dieser Flip-Flops bestimmen, um die Übergänge zu realisieren. Ergänzen Sie die Werte der Steuereingänge der JK-Flip-Flops gemäß den Übergängen, die Sie in den drei erweiterten Zeilen angegeben haben. 7

4.3 Ein Abwärtszähler gemäß folgendem Graphen soll als asynchroner Binärzähler mit steuerbaren T-Flip-Flops realisiert werden.

0

2

4

6

Im Folgenden wird Ihnen ein Grundschema von drei steuerbaren T-Flip-Flops vorgegeben, das Sie so ergänzen sollen, dass der gewünschte Binärzähler entsteht.

6 Nach dem Einschalten sind alle T-Flip-Flops im Null-Zustand. Ihre Lösung muss eindeutig erkennbar machen, • welches Stellengewicht jedes T-Flip-Flop für die Darstellung der Binärzahl hat, • welche Signale an den Takteingängen liegen, • welche Signale den Zählerzustand definieren.

15

4.4 Sie sollen mit zwei positiv taktpegelgesteuerten RS-Flip-Flops ein negativ taktflankengesteuertes JK-Flip-Flop realisieren. Geben Sie die Schaltung an.

5

4.5 Welche Funktion erfüllt folgende Schaltung?

negativ taktflankengesteuertes Schieberegister 3

4.6 Warum ist folgende Schaltung nicht funktionsfähig?

RS-Flip-Flop darf nicht gleichzeitig gesetzt und rückgesetzt werden. Was müssen Sie tun, um eine sinnvolle Gesamtfunktion zu erreichen? Geben Sie die Funktion an.

RS-Flip-Flop durch JK-Flip-Flop ersetzen. negativ taktflankengesteuerter asynchroner Zähler 2

16

5. Schaltwerkanalyse

50

5.1 Gegeben ist das folgende synchrone Schaltwerk. Alle Flip-Flops sind nach dem Einschalten im Null-Zustand.

5.1.1 Bestimmen Sie die Schaltfunktionen für die Steuereingänge der Flip-Flops.

J2 = X Q1 + Q0 Q2 + X Q1 Q2 + Q0 Q1 Q2 K2 = Q1 Q0 X J1 = Q0 K1 = Q0 X J0 = Q1 + X K0 = 1

9

5.1.2 Im Folgenden wird Ihnen das Schema einer Übergangstabelle vorgegeben. Bestimmen Sie Werte der Steuereingänge gemäß den Übergangsfunktionen und die Übergänge.

17

K0 = 1

J0 = Q1 + X K1 = Q0 X J1 = Q0 K2 = Q1 Q0 X J2 = X Q1 + Q0 Q2 + X Q1 Q2 + Q0 Q1 Q2

X

n Q2 Q1

n+1 Q0 Q2 Q1 Q0 J2

K2

J1

K1

J0

K0

0

0

0

0

0

0

1

0

0

0

0

1

1

0

0

0

1

0

1

0

0

0

1

1

1

1

0

0

1

0

1

1

0

1

0

0

0

0

1

0

0

1

1

1

0

0

1

1

1

1

0

1

0

1

0

0

1

0

1

1

0

0

0

1

1

0

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

1

1

0

1

0

0

0

0

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

0

0

0

0

1

0

0

0

0

1

1

1

0

0

1

0

1

0

0

0

1

0

1

1

1

0

1

0

0

1

1

0

0

0

0

1

1

1

0

1

1

1

1

0

1

0

1

0

1

1

1

1

0

0

1

0

1

1

0

0

0

1

1

1

1

0

1

1

1

0

1

0

1

0

1

1

1

1

1

0

1

1

1

1

0

0

0

1

1

1

1

1

1

1

1

0

0

0

1

0

1

1 22

18

Oder eine Lösung, die nur die beiden Zyklen bei X=0 bzw. X=1 umfasst.

5.2 Prüfen Sie folgende Schaltung eines positiv taktpegelgesteuerten RS-Flip-Flops. Korrigieren Sie den Fehler im Schaltbild direkt.

Q

Q

Oder R und S tauschen. 3

19

5.3 Gegeben ist folgende Schaltung:

Warum handelt es sich bei der Schaltung nicht um ein Schaltnetz? (Antwort in einem Satz)

Die Schaltung enthält die Rückkopplung einer Ausgangsvariablen. Y und D sind die zueinander inversen Ausgänge eines taktpegelgesteuerten RSFlip-Flops. 1

Untersuchen Sie die Schaltung. Vielleicht erkennen Sie sofort die Funktion. Dann können Sie Y im folgenden Signal-Zeit-Diagramm sofort angeben und gewinnen in kurzer Zeit wichtige Punkte. Oder Sie füllen es zuerst aus und schließen daraus auf die Funktion. Ergänzen Sie also das folgende Signal-Zeit-Diagramm.

12

Welche Funktion hat die Schaltung? (Antwort in einem Satz)

Insgesamt ergibt sich die Funktion eines taktpegelgesteuerten D-Flip-Flops. 3

20

6. Maschinennahes Programmieren

Ein Datenträger enthalte für N Prüflinge - gemäß dem folgenden Strukturmuster - N Datensätze, in denen nur noch die Noten fehlen. matnr1_4 matnr5_8 familienname vorname prüfdatum fachschlüssel note

: 4 Zeichen, Variablentyp: double word = 32Bit : 4 Zeichen, Variablentyp: double word : 16 Zeichen, Feld von 4 double words : 16 Zeichen, Feld von 4 double words : 8 Zeichen, Feld von 2 double words : 4 Zeichen, Variablentyp: double word : 4 Zeichen, Variablentyp: double word

Ein Assemblerprogramm liest die N Datensätze in ein Feld prüfergebnisse ein und stellt die Anzahl N als Wert der Variablen n zur Verfügung. Im Folgenden sind kursiv geschriebene Namen als Variablen- bzw. Feldnamen zu behandeln. Namen in großen Buchstaben sind (ganzzahligen) Konstanten gleich zu setzen. Die hier verwendeten Variablen haben 32 Bit.

Ihre Aufgabe ist es, das Programm so fortzusetzen, dass in den Datensatz, der zu den gegebenen Werten in matnr1_4 und matnr5_8 gehört, ein gegebener Wert in note an der Stelle note im Datensatz eingetragen wird. 6.1 Im Folgenden wird Ihnen ein Struktogramm vorgegeben, das Grundlage Ihrer Lösung sein muss. Beschreiben Sie im Ausführungsblock pauschal, was zu tun ist. Das Endekriterium darf nur die Tatsache auswerten, dass es N Datensätze gibt. Die entsprechende Schleifensteuerung muss im Ausführungsblock erkennbar sein.

Anfangs- und Endwert des Zeigers setzen

Adressierten Datensatzes auf passende Matrikelnummer untersuchen: Treffer: Datensatz gemäß note aktualisieren und im Zeiger den Endwert einstellen. Kein Treffer: Zeiger aktualisieren

Wiederhole, bis Zeiger den Endwert gemäß N erreicht hat

3

21

6.2 Vorbereitung 6.2.1 Geben Sie der Konstanten SATZLÄNGE (entspricht Strukturlänge) den richtigen Wert als Vielfaches von Byte SATZLÄNGE =…7 · 8 oder 40 oder 28H..

6.2.2 Der Inhalt eines Indexregisters (I) ist ein Zeiger und [(I)] = [Zeiger] bezeichne den Inhalt des Speicherwortes, das durch den Zeiger (indirekt) adressiert wird. Zeiger adressieren das erste Byte einer Variablen. Sie sollen dem Indexregister durch einen Ladebefehl einen Anfangswert geben, und zwar den, der in diesem Anwendungsproblem erforderlich ist: (I) ← … prüfergebnisse……

6.2.3 Der Inhalt des Indexregisters adressiere den Beginn eines Datensatzes. Sie sollen den Inhalt des Indexregisters durch Befehl inkrementieren, und zwar so, dass der Beginn des nächsten Datensatzes adressiert wird. (I) ← (I) + … SATZLÄNGE …. Geben Sie den Wert der Konstanten mit dem symbolischen Konstantennamen an.

6.2.4 Der Inhalt des Indexregisters adressiere den Beginn eines Datensatzes. Sie sollen den Inhalt des Indexregisters durch Befehl inkrementieren, und zwar so, dass das Speicherwort adressiert wird, in dem die Note eingetragen werden muss: (I) ← (I) +…52…. Geben Sie den Wert der Konstanten direkt als Zahl der Bytes an. 3 Bereitgestelltes und verwendbares Unterprogramm: Ein Unterprogramm hat als Eingangsvariable die Variable n, multipliziert sie mit der Konstanten SATZLÄNGE und liefert das Ergebnis als Ausgangsvariable listenendzeiger. Da Sie den Dienst dieses Unterprogrammes brauchen, müssen Sie es an geeigneter Stelle aufrufen. Der Aufruf ist: call endlist .

6.3 Das Strukturdiagramm des Algorithmus Annahme: Die gegebenen Werte in matnr1_4 und matnr5_8 sind zulässig, d.h. der zugehörige Datensatz ist auch tatsächlich vorhanden. Beschreiben Sie hier Ihren Algorithmus so, dass die blockweise Umsetzung in Befehle möglich wird. Ihre Lösung muss genau diese klar erkennbare single-entry/single exit-Struktur haben. 22

Zeiger auf den Anfang des Feldes prüfergebnisse setzen

A

Endwert des Zeigers bestimmen B

matnr1_4 und matnr5_8 aus Datensatz holen und mit matnr1_4 und matnr5_8 vergleichen

C

identisch? ja

nein

Den aktuellen Wert von note in note eintragen;

Den Zeiger so inkrementieren, dass der Beginn des nächsten Satzes adressiert wird;

Den Zeiger auf Endwert einstellen;

D

E

Zeiger mit Endwert vergleichen; Beende, wenn gleich; Wiederhole, wenn ungleich;

G 6

6.4 Die Entwicklung des Assemblerprogrammes Setzen Sie im nächsten Schema die Blöcke in Befehle um. Beachten Sie die Hinweise zum Befehlssatz (S.27). Es gelten die Merkmale, die in 6.2 festgelegt wurden. Halten Sie sich bitte genau an die gegebene Blockstruktur. Ihre Umsetzung in Befehle muss die Zuordnung zu den Blöcken klar erkennbar machen, sonst Punktabzug. Sie können und müssen mit einem einzigen Indexregister und einzigen Arbeitsregister auskommen. 23

Blockmerkmal ↓

A 1 B

(I) ← prüfergebnisse

mov ESI, prüfergebnisse

call endlist

call endlist

wieder: (A) ← [(I)] (A) compare (matnr1_4)

wieder: mov EAX, [ESI] cmp EAX, matnr1_4

C

IF ((A) = matnr1_4) THEN (PC) ← vergleich_weiter (PC) ← nächster_satz

je vergleich_weiter

C

jmp nächster_satz

C

vergleich_weiter: (I) ← (I) + 4 (A) ← [(I)]

vergleich_weiter: add ESI, 4 mov EAX, [ESI]

C

(A) compare (matnr5_8)

cmp EAX, matnr5_8

C

IF ((A) = (matnr5_8)) THEN (PC) ← eintrag (I) ← (I) - 4

je eintrag

C

sub ESI, 4

C

nächster_satz: (I) ← (I) + SATZLÄNGE (PC) ← wieder_end

nächster_satz: add ESI, SATZLÄNGE jmp wieder_end

E

eintrag: (I) ← (I) + 48 (A) ← (note)

eintrag: add ESI, 48 mov A,note

D

[(I)] ← (A)

mov [ESI], EAX

D

(I) ← (listenendzeiger)

mov ESI, listenendzeiger

wieder_end: (I) compare (listenendzeiger) IF ((A) = (listenendzeiger)) THEN (PC) ← wieder

wieder_end: cmp ESI, listenendzeiger je wieder

D 2 F

STOP

hlt

C

C

E

D

F 3,4,5 F

Nur ein Befehl pro Zeile! Schreiben Sie bitte deutlich und trennen Sie Marken durch Doppelpunkt vom Text, der in der Zeile den eigentlichen Befehl angibt. Falls Reinschriften notwendig werden, streichen Sie lieber durch und benutzen zusätzlich das nächste Blatt.

24

Blockmerkmal ↓

16

25

6.3 Nun soll die Annahme wegfallen, dass der Datensatz vorhanden ist, der zu den gegebenen Werten in matnr1_4 und matnr5_8 gehört. Das Programm soll so erweitert werden, dass eine Dienstfunktion mit call standardtext_drucken aufgerufen wird, wenn eine nicht zugelassene Matrikelnummer verwendet wird. Die zusätzliche Definition einer einzigen Variablen und die Ergänzung von wenigen Befehlen machen das möglich. Eine Variable wird durch eine Assembleranweisung definiert, z.B. durch die Anweisung , die einem frei gewählten Namen ein Speicherwort der Länge Byte zuordnet, oder , die dem Namen ein 32 Bit Speicherwort zuordnet. Der Einfachheit halber wird hier eine Variable mit 32Bit angenommen, die ganz in ein 32Bit-Register passt. Ergänzen Sie in der folgenden Anweisung den Namen Ihrer Wahl und betrachten Sie die Definition als ausgeführt.

gefunden_merker………define doubleword Ihre Lösung sollte nicht mehr als 8 zusätzliche Maschinenbefehle mit call-Befehl enthalten. Markieren Sie im Befehlscode eindeutig die Positionen Ihrer Ergänzungen und geben Sie die Zuordnungen und die zugehörigen Befehle hier an.

(A) ← 0

mov A, 0

1

(gefunden_merker) ← (A)

mov gefunden_merker, A

1

(A) ← 1

mov A, 1

2

(gefunden_merker) ← (A)

mov gefunden_merker, A

2

(A) ← (gefunden_merker)

mov EAX, gefunden_merker

3

(A) compare 1

cmp EAX, 1

4

IF ((A) = 1) THEN (PC) ← ende

je ende

5

call standardtext_drucken ende:

call standardtext_drucken ende:

6

7

26

Hinweise zum Befehlssatz:



X ist ein Zahlenwert, also eine Konstante. Anstelle des Zahlenwertes kann man auch den Konstantennamen verwenden, wenn man den Zahlenwert dem Konstantennamen zugeordnet hat, z.B. SATZLÄNGE = 1234 Man kann anstelle von X den Konstantennamen schreiben. Schreiben Sie bitte den Konstantennamen, wenn eine entsprechende Konstantendefinition vorhanden ist (siehe 6.2). z.B.: (I) ← (I) + SATZLÄNGE • (X) ist eine mit der Adresse X adressierte Speicherstelle, die eine Variable realisiert. Man kann anstelle der Adresse X auch den Variablennamen verwenden, wenn man dem Variablennamen über eine Datendefinition-Anweisung ein Speicherwort (bestimmter Länge) zugewiesen hat, z.B. gefunden_merkmal define ……. Schreiben Sie bitte in der funktionalen Notation ( Variablenname ), wenn eine entsprechende Variablendefinition angenommen werden kann. z.B.: (gefunden_merkmal) ← (A) in der funktionalen Notation mov gefunden_merkmal, A in der mnemotechnischen Notation, in der der Variablenname immer für den Wert der Variablen, also den Inhalt des realisierenden Speicherwortes steht. • Die Addition und die Subtraktion können auf (A) und (I) angewendet werden. Die Register haben 32Bit Länge. • Zusätzlicher Befehl: Es wird ein Compare-Befehl eingeführt, der den Zustand von (A) oder den von (I) auswertet. Er setzt gemäß diesem Zustand die Zustandbits, z.B. Null (zero): (reg) compare X bzw. (reg) compare Konstantenname (reg) compare (X) bzw. (reg) compare ( Variablenname )

Das Ergebnis bestimmt die Verzweigung im darauf folgenden Verzweigungsbefehl, z.B.: (A) compare (matrnr1_4) IF ((A) = (matrnr1_4) ) THEN (PC) ← marke • In (PC) ← X ist X eine Adresse. Anstelle des Zahlenwertes der Adresse kann man auch einen Markennamen verwenden, wenn man die Marke vor dem Zielbefehl definiert hat. Eine Marke besteht hier aus einem Markennamen und einem Doppelpunkt, der ihn vom Text des Zielbefehles trennt. Schreiben Sie bitte den Markennamen, wenn Sie eine entsprechende Marke definiert haben. z.B.: . wieder: … . (PC) ← wieder Sie können zwischen der funktionalen und der mnemotechnischen Notation wählen, müssen sich aber für eine entscheiden. 27

Befehlssatz

Funktionale Notation gemäß Skriptum (reg) ← X

Mnemotechnische Notation mov reg, KONSTANTE

(A) ← (I)

mov A, I

(I) ←(A)

mov I, A

(reg) ← (X)

mov reg, Variablenname

reg = A oder reg = I

(X) ← (reg)

mov Variablenname, reg

reg = A oder reg = I

(A) ← [(I)]

mov A, [ I ]

[(I)] ←(A)

mov [ I ], A

(I) ← (I) + 1,

inc I

(I) ← (I) - 1,

dec I

(reg) ← (reg) + X (reg) ← (reg) + (X) (reg) ← (reg) + [(I)] (reg) ← (reg) – X (reg)←(reg) – (X) (reg)←(reg) - [(I)] (reg) compare X (reg) compare (X)

add reg, KONSTANTE add reg, Variablenname add reg, [I] sub reg, KONSTANTE sub reg, Variablenname sub reg, [I] cmp reg, KONSTANTE cmp reg, Variablenname

reg = A oder reg = I

reg = A oder reg = I reg = A oder reg = I Von reg wird der 2. Operand subtrahiert. Das Ergebnis wird nicht in reg geschrieben, sondern es wird in Zustandsbits festgehalten, ob gilt:

zero: (equal) positiv: (greater) negativ: (below). jump equal, wenn compare zero festgestellt und festgehalten hat.

IF ((reg) = X) THEN (PC) ← marke IF ((reg) = (X)) THEN (PC) ← marke

je marke

(PC) ← marke

jmp marke

jump

STOP

hlt

Anhalten des Programmablaufes

28