11.04.2014 Aufrufe

Dinatos-Befehle - Ra.informatik.tu-darmstadt.de

Dinatos-Befehle - Ra.informatik.tu-darmstadt.de

Dinatos-Befehle - Ra.informatik.tu-darmstadt.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Fachgebiet Rechnerarchitek<strong>tu</strong>r<br />

Fachbereich Informatik<br />

Lösungsvorschlag<br />

8. Übung<br />

Technische Grundlagen <strong>de</strong>r Informatik II<br />

Sommersemester 2008<br />

Aufgabe 8.1: <strong>Dinatos</strong>-<strong>Befehle</strong><br />

Betrachtet wird das Zustandsdiagramm aus <strong>de</strong>r Vorlesung.<br />

4<br />

LDA*<br />

AR MEM[AR]<br />

LDA<br />

NOP<br />

NOT<br />

SHR<br />

LDA#<br />

IF>#<br />

IF=#<br />

GO#<br />

BRNC<br />

STA*<br />

0 P 0 Init<br />

1<br />

2<br />

GO<br />

BR MEM[P], P P+1<br />

STOP<br />

Get<br />

Fetch instruction<br />

AND<br />

ADD<br />

MUL<br />

case (OPC)<br />

0: "NOP" next 1<br />

1: "NOT" AC ~AC, next 1<br />

2: "SHR K" AC AC >> K , next 1<br />

3: "LDA# N" AC N, next 1<br />

4: "LDA N" AR N, next 3<br />

5: "LDA* N" AR N, next 4<br />

6: "STA N" AR N, next 5<br />

7: "STA* N" AR N, next 6<br />

8: "AND N" AR N, next 7<br />

9: "ADD N" AR N, next 7<br />

10: "MUL N" AR N, next 7<br />

11: "IF># N" C AC > N, next 1<br />

12: "IF=# N" C AC == N, next 1<br />

13: "GO# N" P N, next 1<br />

14: "GO N" AR N, next 14<br />

15: "BRNC N" if ~C then P P+N fi, next 1<br />

16: "STOP" next 2<br />

7 BC MEM[AR]<br />

Decodieren und teilweise ausführen<br />

3<br />

6<br />

AC MEM[AR]<br />

next 1<br />

AR MEM[AR]<br />

5<br />

STA<br />

14<br />

MEM[AR]:=AC<br />

next 1<br />

P MEM[AR]<br />

next 1<br />

10<br />

MUL<br />

ADD<br />

AC AC * BC<br />

next 1<br />

AND<br />

9<br />

8<br />

AC AC + BC<br />

next 1<br />

AC AC & BC<br />

next 1<br />

Geben Sie für die <strong>Befehle</strong> LDA#, LDA, STA, STA*, GO und ADD an, welche Zustän<strong>de</strong><br />

bei <strong>de</strong>r Befehlsinterpretation durchlaufen wer<strong>de</strong>n. Ordnen Sie dabei außer<strong>de</strong>m <strong>de</strong>n<br />

Zustän<strong>de</strong>n jeweils die auszuführen<strong>de</strong>n Operationen zu.<br />

Notation: (Zustand) Operationen<br />

LDA#<br />

LDA<br />

(2) ACN<br />

Seite 1 von 5<br />

(3) ACm(AR)<br />

STA (1) BR m(P),<br />

(5) m(AR):=AC<br />

STA*<br />

P P+1 (2) ARN (6) ARm(AR) (5) m(AR):=AC<br />

GO<br />

ADD<br />

(14) Pm(AR)<br />

(7) BCm(AR) (9) ACAC+BC<br />

Synchrone Zuweisung an Register; := asynchrone Zuweisung an Speicher


Aufgabe 8.2: Binäres Maschinenprogramm<br />

Füllen Sie die leeren Fel<strong>de</strong>r aus. Korrigieren Sie dabei einen wahrscheinlichen<br />

Programmierfehler im gegebenen <strong>Dinatos</strong>-Programm. Stellen Sie dabei sicher, dass<br />

das Programm en<strong>de</strong>t.<br />

Hinweis: Eine Übersicht <strong>de</strong>r <strong>Dinatos</strong>-<strong>Befehle</strong> fin<strong>de</strong>n Sie auf <strong>de</strong>m Hilfsblatt zu dieser<br />

Übung (<strong>Dinatos</strong>-Opco<strong>de</strong>s).<br />

Inhalt<br />

(hex.)<br />

OPC<br />

Adresse/<br />

Konstante<br />

(<strong>de</strong>z.)<br />

Adresse<br />

Beschreibung<br />

Wirkung<br />

Ergebnis (hex.)<br />

initial AC=0<br />

0 03 00000F lda# 15 load const AC15 AC=0000000f<br />

1 02 000002 shr 2 shift right AC(15>>2) AC=00000003<br />

2 06 000009 sta 9 store m[9]3 m[9]=3<br />

3 03 000000 lda# 0 load const AC0 AC=0<br />

4 05 000007 lda* 7 La<strong>de</strong><br />

indirekt<br />

ACm[m[7]]<br />

AC=3<br />

5 0E 000008 go 8 goto indirekt Pm[8] P=5<br />

6 10 000000 stop anhalten<br />

7 00000009 Adresse<br />

8 00000005 Fehler, ersetzen durch go-Adresse<br />

6 (00000006), verhin<strong>de</strong>rt Endlosschleife<br />

9 00000003 Da<strong>tu</strong>m<br />

Aufgabe 8.3: Rechnen mit positiven Dualzahlen<br />

Zwei positive Dualzahlen X, Y ≤ 2 31 - 1 sind zu addieren.<br />

Dazu soll ein <strong>Dinatos</strong>-Assembler-Programm geschrieben wer<strong>de</strong>n, welches außer <strong>de</strong>r<br />

Summe S <strong>de</strong>r bei<strong>de</strong>n Zahlen X und Y auch die Überlaufbedingung OV (overflow)<br />

erzeugt.<br />

a) Welche Werte kann die MSB-Stelle (Stelle 31 bei Zählweise X 31 bis X 0 ) <strong>de</strong>rartig<br />

normierter positiver Dualzahlen nur annehmen?<br />

Die höchstwertige Stelle (MSB) ist immer 0, da positive Dualzahlen kleiner 2 31 nur<br />

31 Bits zur Darstellung benötigen.<br />

b) Wie kann ein auftreten<strong>de</strong>r Overflow bei <strong>de</strong>r Addition solcher Zahlen erkannt<br />

wer<strong>de</strong>n?<br />

OV entspricht hier <strong>de</strong>m Carry-Out, in unserem Falle <strong>de</strong>m Bit S 31 , <strong>de</strong>m MSB <strong>de</strong>r<br />

Summe S.<br />

Seite 2 von 5


c) Beschreiben Sie Ihre Lösungsi<strong>de</strong>e und fertigen Sie einen Ablaufplan an, z.B. ein<br />

Flussdiagramm o<strong>de</strong>r ein Sta<strong>tu</strong>sdiagramm (Beispiele für ein Sta<strong>tu</strong>sdiagramm siehe<br />

Vorlesungsfolien o<strong>de</strong>r Paper, abrufbar über die Webseite <strong>de</strong>r Veranstal<strong>tu</strong>ng), aus<br />

<strong>de</strong>m <strong>de</strong>r Ablauf Ihrer I<strong>de</strong>e hervorgeht.<br />

Lösungsi<strong>de</strong>e:<br />

Flussdiagramm:<br />

1. X+Y bil<strong>de</strong>n und in S speichern<br />

2. MSB durch UND-Maske herausfiltern<br />

(untere 31 Bits ausblen<strong>de</strong>n)<br />

3. Abfrage ob MSB>0 (Befehl IF># 0)<br />

d) Schreiben Sie nun das Assembler-Programm. Die<br />

Operan<strong>de</strong>n stehen in <strong>de</strong>n Speicherzellen 18 und 19. Die<br />

Summe S soll in <strong>de</strong>r Speicherzelle 20 abgelegt und bei<br />

<strong>de</strong>r Berechnung <strong>de</strong>r Überlaufbedingung nicht geän<strong>de</strong>rt<br />

wer<strong>de</strong>n. Die Überlaufbedingung soll in <strong>de</strong>m C-Bit<br />

gespeichert wer<strong>de</strong>n. Verwen<strong>de</strong>n Sie nur diese<br />

Speicherzellen, <strong>de</strong>n Akkumulator AC sowie das C-Bit beim<br />

Programmieren.<br />

<strong>Dinatos</strong>-Programm:<br />

0 LDA 18<br />

1 ADD 19<br />

2 STA 20<br />

3 LDA# 0<br />

4 NOT<br />

5 SHR 1<br />

6 NOT<br />

7 AND 20<br />

8 IF># 0<br />

9 STOP<br />

ac := X<br />

ac := ac + Y<br />

S := ac<br />

ac := 0<br />

ac := not ac<br />

ac := ac >> 1<br />

ac := not ac<br />

(ac = 80000000 16<br />

)<br />

ac := ac & S<br />

C := (ac > 0?)<br />

1.<br />

2.<br />

3.<br />

Aufgabe 8.4: Rechnen mit 2K-Zahlen<br />

Zwei 2K-Zahlen X und Y mit n=32 Bit sind zu addieren. Die 2K-Zahlen besitzen zwei<br />

i<strong>de</strong>ntische Vorzeichenbits (Stellen 31 und 30 bei Zählweise X 31 bis X 0 ). Man spricht<br />

auch von einer so genannten Schutzstelle. Der Zahlenbereich wird also nur zur Hälfte<br />

ausgeschöpft.<br />

Dazu soll ein <strong>Dinatos</strong>-Assembler-Programm geschrieben wer<strong>de</strong>n, welches außer <strong>de</strong>r<br />

Summe S <strong>de</strong>r bei<strong>de</strong>n Zahlen X und Y auch die Überlaufbedingung OV (overflow)<br />

erzeugt.<br />

a) In welchem Zahlenbereich liegen die Werte x und y?<br />

Sie liegen im Bereich -2 30 ≤ x, y ≤ 2 30 - 1.<br />

b) Wie kann ein auftreten<strong>de</strong>r Overflow bei <strong>de</strong>r Addition solcher Zahlen erkannt<br />

wer<strong>de</strong>n?<br />

Hinweis: Fertigen Sie sich eine Tabelle für n=3 Bit mit 16 Einträgen an, in <strong>de</strong>r Sie<br />

Seite 3 von 5


für alle möglichen Kombinationen von X, Y und S die Überlaufbedingung OV<br />

bestimmen.<br />

Nach Kap. 3, Folie 34, drei Möglichkeiten:<br />

1. Wenn Vorzeichen von X und Y gleich und das Vorzeichen wechselt<br />

OV = (X n Y n S n =ool) v (X n Y n S n =llo)<br />

2. Wenn die Vorzeichen von X und Y gleich und die bei<strong>de</strong>n höchstwertigen<br />

Summenbits S n+1 S n ungleich sind<br />

OV = (X n ≡ Y n ) . (S n+1 ⊕ S n )<br />

3. Wenn die Überträge Carry-Out und <strong>de</strong>r vorhergehen<strong>de</strong> Übertrag ungleich sind<br />

OV = (C n+1 ⊕ C n )<br />

Welche Möglichkeit ist am besten?<br />

Es gilt: X und Y haben zwei gleiche Vorzeichenbits, X n =X n-1 , Y n =Y n-1<br />

1. Kann verwen<strong>de</strong>t wer<strong>de</strong>n, aber kompliziert zu testen.<br />

Die Bedingung OV = (X n Y n S n =ool) v (X n Y n S n =llo)<br />

wird zu (ersetze n+1-->n, n-->n-1)<br />

OV= (X n-1 Y n-1 S n-1 =ool) v (X n-1 Y n-1 S n-1 =llo)<br />

2. ebenso ersetze n+1-->n, n-->n-1<br />

OV=(X n-1 =Y n-1 ).(S n xor S n-1 )<br />

Der Teil (X n =Y n ) o<strong>de</strong>r (X n-1 =Y n-1 ) müsste extra getestet wer<strong>de</strong>n. Umständlich.<br />

3. Am einfachsten: ersetze C n+1 durch S n , C n durch S n-1 : OV=(S n xor S n-1 )<br />

Die letzte Variante ergibt sich auch aus <strong>de</strong>r Tabelle für n=3 Bits.<br />

X Y S OV<br />

000 (±0) 000 (±0) 000 (±0) nein<br />

000 (±0) 001 (+1) 001 (+1) nein<br />

000 (±0) 110 (-2) 110 (-2) nein<br />

000 (±0) 111 (-1) 111 (-1) nein<br />

001 (+1) 000 (±0) 001 (+1) nein<br />

001 (+1) 001 (+1) 010 (+2) ja<br />

001 (+1) 110 (-2) 111 (-1) nein<br />

001 (+1) 111 (-1) 000 (±0) nein<br />

110 (-2) 000 (±0) 110 (-2) nein<br />

110 (-2) 001 (+1) 111 (-1) nein<br />

110 (-2) 110 (-2) 100 (-4) ja<br />

110 (-2) 111 (-1) 101 (-3) ja<br />

111 (-1) 000 (±0) 111 (-1) nein<br />

111 (-1) 001 (+1) 000 (±0) nein<br />

111 (-1) 110 (-2) 101 (-3) ja<br />

111 (-1) 111 (-1) 110 (-2) nein<br />

Seite 4 von 5


c) Beschreiben Sie Ihre Lösungsi<strong>de</strong>e und fertigen Sie einen Ablaufplan an, z.B. ein<br />

Flussdiagramm o<strong>de</strong>r ein Sta<strong>tu</strong>sdiagramm.<br />

Lösungsi<strong>de</strong>e:<br />

Flussdiagramm:<br />

1. X+Y bil<strong>de</strong>n und in S speichern<br />

2. AC = S >> 30<br />

3. AC = 1 o<strong>de</strong>r 2? (C setzen)<br />

alternative Lösungsi<strong>de</strong>e:<br />

1. X+Y bil<strong>de</strong>n und in S speichern<br />

2. XOR-bit <strong>de</strong>r bei<strong>de</strong>n Bits bil<strong>de</strong>n<br />

Eine Möglichkeit:<br />

MSB (Bit n) und Bit n-1 ausblen<strong>de</strong>n durch<br />

UND-Maske (0100..0) und nach G,H speichern<br />

AC and 0100..0 -> G (Bit Sn-1)<br />

shr AC<br />

AC and 0100..0 -> AC, H (MSB Bit Sn)<br />

(not AC) and MASK -> AC (not Sn gebil<strong>de</strong>t)<br />

AC and G -> AC (not Sn and Sn-1)<br />

... usw.<br />

3. Abfrage ob XOR-Bit > 0 (Befehl IF># 0)<br />

d) Schreiben Sie nun das Assembler-Programm. Die<br />

Operan<strong>de</strong>n stehen in <strong>de</strong>n Speicherzellen 18 und<br />

19. Die Summe S soll in <strong>de</strong>r Speicherzelle 20<br />

abgelegt wer<strong>de</strong>n. Die Überlaufbedingung soll in<br />

<strong>de</strong>m C-Bit gespeichert wer<strong>de</strong>n.<br />

<strong>Dinatos</strong>-Programm:<br />

0 LDA 18<br />

1 ADD 19<br />

2 STA 20<br />

3 SHR 30<br />

4 IF=# 1<br />

5 BRNC# 1 //if c=0 then goto 7<br />

6 GO# 8<br />

7 IF=# 2<br />

8 STOP<br />

Überlauftest-Programm<br />

ac := X<br />

ac := ac + Y<br />

S := ac<br />

ac := ac >> 30<br />

C := (ac = 1?)<br />

C=1?<br />

nein<br />

C := (ac = 2?)<br />

Sta<strong>tu</strong>sdiagramm:<br />

ac := X<br />

ac := ac + Y<br />

S := ac<br />

ja<br />

ac := ac >> 30<br />

C := (ac = 1?)<br />

C = 0<br />

1.<br />

2.<br />

1.<br />

2.<br />

C := (ac = 2?)<br />

3.<br />

3.<br />

Seite 5 von 5

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!