Skripte DHBW

Vorlesungsskripte aus dem DHBW-Studium

Gleitpunktarithmetik und Maschinenbefehle

aus der Vorlesung Rechnertechnik vom 13.03.2018


Beispiel:

Dual Oktal Dezimal Hex (126d+35d=161d126_d + 35_d = 161_d)
01111100111110 176176 126126 7E7E Summand 1
+100011+ 100011 +43+ 43 +35+ 35 +23+ 23 Summand 2
1111110011111100 \leftarrow 110110 \leftarrow 010010 \leftarrow 00 \leftarrow Übertrag (Carry)
1010000110100001 241241 161161 A1A1 Summe

Beispiel 2:

Dual Oktal Dezimal Hex (130d42d=88d130_d - 42_d = 88_d)
1000001010000010 202202 130130 8282 Minuend
101010- 101010 52- 52 42- 42 2A- 2A Subtrahend
1111000011110000 \leftarrow 100100 \leftarrow 110110 \leftarrow 1010 \leftarrow Borger (Borrow)
0101100001011000 130130 088088 5858 Differenz

Analogie beider Multiplikationsverfahren:

101 * 110
---------
  101
   101
    000
--------- / 
  11110 \/
26 * 242
--------
  52
  104
    52
--------
  6292
1A * F2
-------
 186
   34
-------
 1894

Nebenrechnungen:
FA=96,1F+9=18F \cdot A = 9\underline{6}, \quad 1 \cdot F + 9 = \underline{18}
2A=14,21+1=32 \cdot A = 1\underline{4}, \quad 2 \cdot 1 + 1 = \underline{3}

Aus einer Vielzahl möglicher Zahlendarstellungen werden aus ökonomischen Gründen in Rechnern in der Regel nur wenige realisiert.
Üblich sind:

Duale Festpunktzahlen sind ganzzahlig; sie werden eingesetzt, wenn sicher vorhergesagt werden kann, dass sich die zu berechnenden Ergebniswerte im Bereich der darstellbaren Festpunktzahlen bewegen. Darstellungseinheiten für Festpunktzahlen sind Maschinenwörter von 88, 1616, 3232 oder 6464 Bit Länge.

Es gelten hierbei folgende Vorschriften:

Negative Zahlen werden als Zweierkomplement dargestellt. Für eine nn-stellige Zahl xx entsteht das Zweierkomplement durch 2nx2^n - |x|; d.h. es wird immer zu 2n2^n ergänzt.

Beispiel: n=8:n = 8:

Dezimal Dual
28=2562^8 = 256 1000000001\,0000\,0000
27-27 11011- 1\,1011
Zweierkomplement von 27 229\rightarrow 229 (0)11100101(0)\,1110\,0101

Das Zweierkomplement kann auch einfacher berechnet werden:

  1. Invertiere alle Bits
  2. Addiere eine 11

Beispiel: 095d27d=086d095_d - 27_d = 086_d

           invertiere     
  0101 1111 bitweise      addiere 1 
- 0001 1011 ----> 1110 0100 -----> 1110 0100
                                           1
                                   ---------
                                   1110 0101

\underbrace{--------------------}

0101111101011111
- 1110010111100101
1 111111111111
(1)(1) 0100000001000000

Übung: Berechne Zweierkomplement von x=15212dx = 15212_d nach der Methode 2nx2^n - |x| mit n=16n = 16.

Für die Darstellung alphanumerischer Zeichen, d.h. Alphabet mit Groß- und Kleinbuchstaben, Satz- und Sonderzeichen reichen 66 Bit für 64 Zeichen. Die weitverbreitesten Codes zur Zeichendarstellung verwenden 88 Bits, wobei der Zeichensatz um Steuerzeichen für externe Geräte wie Drucker oder Bildschirm sowie zur Datenübertragung erweitert ist.

Die Darstellung von Gleitpunktzahlen ist technisch aufwendiger, sie gestaltet aber die Abdeckung von großen Wertebereichen mit befriedigender Genauigkeit.

Die Abschätzung von Ergebnisdaten muss nur grob erfolgen, da es meist nur Gleitpunktdarstellungen mit einfacher, doppelter oder vierfacher Genauigkeit gibt. Grundlage der Gleitpunktdarstellung einer rellen Zahl xx ist die Form:

x=mbemitb{2,8,16}undeZund1<m<+1. x = m \cdot b^e \quad \text{mit} b \in \{2, 8, 16\} \text{und} e \in \mathbb{Z} \text{und} -1 < m < +1.

Der Dezimalpunkt ist bei der Mantisse linksbündig. Ist die erste Ziffer der Mantisse hinter dem Dezimalpunkt ungleich 00 (0\neq 0), so bezeichnet man die Darstellung als normalisiert. Dann ist:

0.1<m<1oderm=0. 0.1 < m < 1 \quad \text{oder} \quad m = 0.

Für den Exponenten ee genügt ein kleiner Wertebereich, z.B.

50<e<+50,eZbeib=10, -50 < e < +50, \quad e \in \mathbb{Z} \quad \text{bei} \quad b = 10,

um Bereiche vom mikroskopisch Kleinen bis astronomisch Großem abzudecken.

Rechnerintern wird das Vorzeichen des Exponenten meist durch eine virtuelle Verschiebung umgangen.

Der EBCDIC-Code (Extended Binary-Coded Decimal Interchange Code) wurde von IBM für Großrechner entwickelt, dabei sind für die Dezimalzahlen alle Bits des zweiten Nibbles gleich 11.

2. Nibble 1. Nibble Zeichen Zahl
11111111 00000000 00 00
\vdots 00010001 11
\vdots 00100010 22
\vdots 00110011 33
\vdots 01000100 44
\vdots 01010101 55
\vdots 01100110 66
\vdots 01110111 77
\vdots 10001000 88
11111111 10011001 99

Der EBCDIC-Code vereinfacht die Konvertierung von Zeichen zu Zahlen und umgekehrt.

Der zweite wichtige Zeichencode ist der ASCII-Code (American Standard Code Information Interchange). Hier sind 77 Bit für die Unterscheidung von 128 Zeichen belegt. Das achte Bit wird als Prüfbit zur Fehlererkennung bei der Übertragung von Zeichen verwendet.

Maschinenbefehle

Ein Maschinenbefehl “befiehlt” eine Operation an spezifizierten Daten, nämlich den sogenannten Operanden. Im Rechner wird ein Befehl in einem Befehlswort kodiert. Ein Befehlswort besteht aus einem Operationsteil und in der Regel aus einem oder mehreren Adressteilen. Bei den meisten Rechnerarchitekturen ist die Länge der Befehlsworte, z.B. wegen unterschiedlicher Anzahl von Adressteilen, unterschiedlich. Üblich sind 1-, 2-, 4- und 6-Byte lange Befehlsworte.

Die wichtigsten Operationsarten des binär kodierten Operationsteils sind:

Neben der Art der Operation verschlüsselt der Operationsteil auch die Länge des Befehls, die Art und Anzahl der Operanden und die Adressierungsart der Operanden. Bei einigen Befehlen wird kein Operand benötigt oder der Operand ist durch den Operationsteil implizit bestimmt, z.B. das Program-Counter-Register beim Rücksprung aus einem Unterprogramm.

Im Adressteil des Befehls wird angegeben, wo sich ein Operand befindet. Grundsätzlich gibt es hierfür zwei Möglichkeiten:

Moderne Prozessoren verfügen über verschiedene Adressierungsarten. Neben direkter Adressangabe gibt es indirekte Verfahren, bei denen die eigentlichen Operanden in dem adressierten Register oder Speicherwort steht. Durch indirekte Adressierung ist es möglich, die Adresse des Operanden zur Laufzeit des Programms zu berechnen. Die indirekte Adressierung ist sehr flexibel, hat jedoch den Nachteil, dass der doppelte Zugriff auf Register oder Arbeitsspeicher die Zeit für Ausführung des Befehls verlängert.

Eine weitere wichtige Adressierungsart ist die Indizierung. Sie wird hauptsächlich beim Zugriff des Programms auf Datenfelder verwendet. Die Daten werden über ein Indexberechnungsverfahren aus dem Arbeitsspeicher abgegriffen. Dabei wird der Inhalt eines speziellen Registers, des Indexregisters, verändert (engl. manipuliert) und auf eine Adresse (Basisadresse eines Datenobjekts), die meist auch in einem Register gehalten wird, aufaddiert, um die effektive (letztendlich) Speicherplatzadresse zu berechnen.

Mit Indizierung kann eine Sequenz von Befehlen auf verschiedene Daten iterativ angewendet werden.

Eine typische Sequenz ist die Addition von Feldelementen.

Beispiel: Addition von 1010 Feldelementen
Programmausschnitt

       SET X = 0
 LOOP: ADD R = R + (B + X)
       INC X
       JUMP to LOOP if x < 10
Basisadresse B
+ effektive Adresse
Indexregister X

Ausführungsphasen eines Maschinenbefehls

Nach dem bisherigen Überlegungen kann die Ausführung eines Maschinenbefehls in folgende Zeitphasen unterteilt werden.

Im Einzelnen sind innerhalb dieser Phasen folgende Schritte in der Ablaufsteuerung notwendig:

F: Befehlszähler in Adressregister übertragen, um den nächsten Befehl aus dem Speicher zu lesen.
F: Befehlszähler inkrementieren
F: Befehl in Befehlsregister laden
D: Befehl dekodieren zur Ausführung durch den Datenprozessor
X: Operandenadressen aus Befehlsregister in Adressregister übertragen und Operanden in allgemeine Register laden.
X: Berechnungen mit den Operanden durchführen
S: Ergebnisse speichern.