# Rechnerarchitektur: Übung 4 ## Aufgabe 1 a) Im Falle einer Nichtblattprozedur werden auf dem Stack Werte, die nach dem Aufruf gebraucht werden sowie die Rücksprungadresse gespeichert. b) $sp ist die Speicheradresse, auf die der Stackpointer zeigt, an dieser Stelle ist der zuletzt auf dem Stack geschriebene Wert c) Den Wert im Register $s0 auf den Stack pushen: ``` addi $sp, $sp, -4 #den Stack um 1 Wort erweitern sw $s0, 0($sp) #den Stack um den Wert von $s0 erweitern ``` Den Wert auf den der Stackpointer zeigt vom Stack poppen: ``` lw $s0, 0($sp) #den letzten Wert vom Stack in $s0 speichern addi $s0, $s0, 4 #den Stack um ein Wort verkleinern ``` d) Die Register $hi und $lo werden dazu verwendet, Zahlen, die größer als 32 Bit sind, abzuspeichern, indem zum Beispiel wie bei der Multiplikation die größeren 32 Bit im $hi-Register abgespeichert werden, die kleineren im $lo-Register (bei der Division wird der Rest im $hi-Register abgespeichert, der Quotient im $lo-Register). Mit den Befehlen mfhi und mflo können die Werte auf andere Register übertragen werden. ## Aufgabe 2 a) Das IEEE 754 Gleitkommaformat setzt sich zusammen aus einem Bit für das Vorzeichen (sign bit), 8 Bit für den Exponenten bei single precision (11 Bit bei double precision) und 23 Bit für die Fraction bei single precision (52 Bit bei double precision). Um die codierte Zahl zu erhalten multipliziert man $(-1)^{\text {sign bit}}$ mit $(1+.Fraction)$ mit $2^\text{Exponent-Bias}$, wobei der Bias bei single precision 127 bzw bei double precision 1023 (dezimal) beträgt. b) Exponent: 00000001 Sign Bit: 0 Fraction: 0000000000000000000000 Bitkodierung: $0 \space 00000001 \space 0000000000000000000000$ Dezimal: $1*(1+0)*2^{(1-127)} = 2^{-126} = 1,2*10^{-38}$ c) Bitkodierung: $1 \space 01111101 \space 01000000000000000000000$ Dezimal: $(-1) * (1+0,25) * 2^{(125-127)} = -1,25*2^{-2} = -0,3125$ d) $- \frac{11}{16}_{10}: 1 \space 01111110 \space 0110000000000000000000$ e) - $-0,75: 1 \space 01111110 \space 1000000000000000000000$ - $99,7_{10}$: 0 \space 01001111 \space 1000111011001100110011$ 99 = 64 + 32 + 2 + 1 -> $1100011_2$ ``` 99 / 2 = 49 R 1 49 / 2 = 24 R 1 24 / 2 = 12 R 0 12 / 2 = 6 R 0 6 / 2 = 3 R 0 3 / 2 = 1 R 1 1 / 2 = 0 R 1 0.7 * 2 = 1.4 0.4 * 2 = 0.8 0.8 * 2 = 1.6 0.6 * 2 = 1.2 0.2 * 2 = 0.4 ... ``` -> $1100011, 1 0110 0110 0110 ...$ = $1, 100011 1 0110 0110 0110 ... * 2^{-6}$ $127 - 6 = 121 = 1001111_2$ ``` 121 / 2 = 60 R 1 60 / 2 = 30 R 0 30 / 2 = 15 R 0 15 / 2 = 7 R 1 7 / 2 = 3 R 1 3 / 2 = 1 R 1 1 / 2 = 0 R 1 ``` ## Aufgabe 3 a) Sign Bit: 0 zu Mantisse: $10,375 = 01010,0110 = 1,0100110 * 2^3$ Exponent 32-bit: $130 = 10000010_2$ Exponent 64-bit: $1026 = 10000000010_2$ 32-bit: $0\space 10000010\space 01001100\ldots 0$ 64-bit: $0\space 10000000010\space 01001100\ldots 0$ Mantisse: $1110,1001 = 1,1101001*2^3$ Exponent 32-bit: $130 = 10000010_2$ Exponent 64-bit: $1026 = 10000000010_2$ 32-bit: $0 \space 10000010 \space 11010010\ldots 0$ 64-bit: $0 \space 10000000010 \space 11010010\ldots 0$