Dinatos-Befehle - Ra.informatik.tu-darmstadt.de
Dinatos-Befehle - Ra.informatik.tu-darmstadt.de
Dinatos-Befehle - Ra.informatik.tu-darmstadt.de
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