Skripte DHBW

Vorlesungsskripte aus dem DHBW-Studium

Darstellungen von Daten und Rechenoperationen

aus der Vorlesung Rechnertechnik vom 15.02.2018


Bearbeitung der Übung

Lösung aus der Vorlesung:

 1:  CLA;       # Setze Akku zu 0.
 2:  STR 4711;  # Speichere Akku-Inhalt an Adresse 4711.
 3:  INA;       # Lese Zahl in Akku.
 4:  SKZ 8:;    # Falls Akku = 0, springe zu 8:
 5:  ADD(4711); # Addiere Inhalt von Adresse 4711 zu Akku
 6:  STR 4711;  # Speichere Akku-Inhalt an Adresse 4711.
 7:  SKP 3:;    # Springe zur Adresse 3:
 8:  ADD(4711); # Lade die Summe aus Adresse 4711 in Akku.
 9:  OUT;       # Gebe die Summe aus.
10:  HLT;       # (halt) Stoppe die Ausführung.

Optimierte Version (powered by Fabian):

def     sum = 4711

        INA;
        SKZ end2;
loop:   STR sum;
        INA;
        SKZ end1;
        ADD(sum);
        SKP loop;
end1:   ADD(sum);
end2:   OUT;
        HLT;

Das Maschinenprogramm wird besser verständlich, wenn man für die Speicheradressen den Namen einer Variablen (sum) und für die Sprungadressen ebenfalls Namen, sogenannte “labels” einführt.

Dieses Vorgehen hat außerdem den Vorteil, dass absolute Speicheradressen bei Änderungen des Programms nicht gesondert gepflegt werden müssen; dadurch wird eine Fehlerquelle vermieden.
Man nähert sich damit einem richtigen Assemblerprogramm.

Daten und Operationen in einem Prozessor

Architekturen, somit Hardware ist auf wenige, genau spezifizierte Informationsdarstellungen abgestimmt. Diese Informationsdarstellungen nennt man Daten. Man unterscheidet folgende Arten von Daten:

Zur rechnerinternen Darstellung von Informationen werden physikalische Größen verwendet, die unterschiedliche Zustände annehmen können, z.B.:

\Rightarrow 2 Zustände \rightarrow binäre Zustände

Aufbau von Daten

Ein Maschinenwort ist eine geordnete endliche Folge von Binärzeichen, die ein Element aus einer Menge von Daten kodiert.

Gängige Wortlängen sind:

Wortlänge Abkürzung
1 Bit
3 Triade
4 Nibble, Tetrade
8 Byte

Als Zählereinheit für die Größe eines Speichers werden in der Regel Byte, Wort (2 Byte) oder Doppelwort (4 Byte) verwendet.

Die Zählereinheiten werden mit Vorfaktoren versehen:

Vorfaktor-Abkürzung Faktor dezimale Größenordnung
k (kilo) 210=10242^{10} = 1\,024 Tausend 10310^3
M (Mega) 220=10485762^{20} = 1\,048\,576 Million 10610^6
G (Giga) 230=1073718242^{30} = 107\,371\,824 Milliarde 10910^9 (engl. billion)
T (Tera) 240=10995116277762^{40} = 1\,099\,511\,627\,776 Billion 101210^{12} (engl. trillion)

Verarbeitungsdaten

Intern arbeiten digitale Rechner mit dem Dual- oder Binärsystem. Für die Ein-/Ausgabe werden als Zahlensysteme neben dem Dezimalsystem (Basis 1010) auch das Dual- (Basis 22), das Oktal- (Basis 88) oder das Hexadezimalsystem (Basis 1616) verwendet.

Für die Darstellung von Informationen gilt allgemein:

Jedes zNz \in \mathbb{N} ist zu einer gegebenen Zahl bNb \in \mathbb{N} eindeutig mit nn Ziffern darstellbar, wenn

zbn1 z \le b^n - 1

ist.

Beispiel: n=8,b=2z281=255n = 8, \, b = 2 \quad \Rightarrow \; z \le 2^8 - 1 = 255
Sei z=250z = 250, dann ist

z=i=0n1zibimitzi{0,1,,b1}. z = \sum_{i = 0}^{n - 1} \; z_i b^i \quad \text{mit} \; z_i \in \{0, 1, \ldots, b - 1\}.
angewendet 250d=z727+z626+z525+z424+\quad 250_d = z_7 \cdot 2^7 + z_6 \cdot 2^6 + z_5 \cdot 2^5 + z_4 \cdot 2^4 +
z323+z222+z121+z020\quad \quad \quad \quad \quad \quad \quad \quad \quad z_3 \cdot 2^3 + z_2 \cdot 2^2 + z_1 \cdot 2^1 + z_0 \cdot 2^0
=127+126+125+124+\quad \quad \quad \quad \quad \quad \quad \quad = 1 \cdot 2^7 + 1 \cdot 2^6 + 1 \cdot 2^5 + 1 \cdot 2^4 +
123+022+121+020\quad \quad \quad \quad \quad \quad \quad \quad \quad 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0
=11111010b.\quad \quad \quad \quad \quad \quad \quad \quad = 11111010_b.

Verfahren zur Umrechnung zwischen Zahlensystemen

Eine Zahl wird zu einer Zahl in bb-adischer Darstellung (Basis bb) durch sukzessive Division durch bb, der jeweilige Rest ist dann die Ziffer ziz_i in der bb-adischen Darstellung. Das nn-Tupel (zn1,zn2,,z0)(z_{n - 1}, z_{n - 2}, \ldots, z_0) heißt bb-adische Darstellung von zz.
Beispiel: z10=2629dz16=?z_{10} = 2629_d \rightarrow z_{16} = \; ? (konvertiere Dezimalzahl in Hexadezimalzahl)

Schritt 0: 2629÷16=164(Rest   5)z0=52629 \div 16 = 164 \quad (\text{Rest} \ \ \ 5) \quad \Rightarrow z_0 = 5
Schritt 1:   164÷16=  10(Rest   4)z1=4\ \ 164 \div 16 = \ \ 10 \quad (\text{Rest} \ \ \ 4) \quad \Rightarrow z_1 = 4
Schritt 2:     10÷16=    0(Rest 10)z2=A\ \ \ \ 10 \div 16 = \ \ \ \ 0 \quad (\text{Rest} \ 10) \quad \Rightarrow z_2 = A
z3=z4==zn1=0z_3 = z_4 = \ldots = z_{n - 1} = 0

2629d=0A45h\Rightarrow 2629_d = 0A45_h \quad \leftarrow Die Zahlen 1010 bis 1515 werden im Hex-System durch die Ziffern AA bis FF dargestellt.

Übung: z10=5384dz16=?z_{10} = 5384_d \rightarrow z_{16} = \; ?
5384÷16=336(Rest 8)z0=85384 \div 16 = 336 \quad (\text{Rest} \ 8) \quad \Rightarrow z_0 = 8
  336÷16=  21(Rest 0)z1=0\ \ 336 \div 16 = \ \ 21 \quad (\text{Rest} \ 0) \quad \Rightarrow z_1 = 0
    21÷16=    1(Rest 5)z2=5\ \ \ \ 21 \div 16 = \ \ \ \ 1 \quad (\text{Rest} \ 5) \quad \Rightarrow z_2 = 5
      1÷16=    0(Rest 1)z3=1\ \ \ \ \ \ 1 \div 16 = \ \ \ \ 0 \quad (\text{Rest} \ 1) \quad \Rightarrow z_3 = 1

z16=5384d=1508h\Rightarrow z_{16} = 5384_d = \underline{1508_h}

Umgekehrt wird eine bb-adische Zahl zu einer Dezimalzahl zdz_d durch die Berechnung von

zd=i=0n1zibi. z_d = \sum_{i = 0}^{n - 1} \; z_i b^i.

gegeben zh=0A45h:z_h = 0A45_h:
zd=10162+4161+5160z_d = 10 \cdot 16^2 + 4 \cdot 16^1 + 5 \cdot 16^0
 =2560+64+5\quad \ = 2560 + 64 + 5
 =2629\quad \ = 2629

In allen Zahlensystemen lassen sich die Operationen Addition, Subtraktion, Multiplikation und Division mit dem vom Dezimalsystem bekannten Verfahren ausführen, d.h. stellenweises Rechnen mit Überträgen und Borger.