Technische Informatik I – Rechner & Zahlen

Website: Moodle Weimar - Jenaplan
Kurs: Test
Buch: Technische Informatik I – Rechner & Zahlen
Gedruckt von: Gast
Datum: Dienstag, 9. Juni 2026, 02:28

1. ▸ 1 · Rechnerarchitektur

Aufbau eines Rechners: EVA-Prinzip und Von-Neumann-Architektur, vertieft im Rollenspiel und mit „Johnny".

2. Das EVA - Prinzip

EVA Prinzip

Mit einem Computer / Spielkonsole alleine kannst du noch wenig anfangen. Um die Geräte bedienen zu können, benötigst du Zubehör, welches du daran anschließen kannst.

Das Zubehör eines Computers nennt man auch Peripherie.

1. Aufgabe

2. Aufgabe

Nach der Eingabe passiert etwas im Computer. Wenn du bei einem Spiel auf dem Controller auf eine Taste drückst, springt die Spielfigur z.B. in die Luft.

Der Computer verarbeitet die Eingabe des Nutzers

Wenn man alles zusammenfasst, ergibt sich daraus das EVA-Prinzip:

3. Aufgabe

  • Das EVA-Prinzip anhand von Alltagsgeräten.

3. Bestandteile eines Computers und deren Funktion

Eingabeeinheit:

Sie hat die Aufgabe, Eingaben an den Computer weiterzuleiten, indem sie diese an den E/A-Bus weitergibt. Von dort geht die Eingabe zuerst in den Arbeitsspeicher (RAM). Während der Ausführung eines Programms sind die Eingaben, die vom Programm zu verarbeitenden Daten. Während der Programmierung ist die Eingabe der Text des Programms, das von einem Editor (einem speziellen Textverarbeitungsprogramm) aufgenommen wird und dann von einem Compiler in Maschinenbefehle übersetzt wird. 
Dies wollen wir aber hier noch nicht besprechen.

Ausgabeeinheit:

Sie dient dazu, die vom Computer erarbeiteten Ergebnisse wieder in eine für Menschen lesbare Form zu bringen (Bildschirm, Drucker, …). Sie erhält die Daten über den E/A-Bus aus dem Arbeitsspeicher.

Bus: 

Das Bussystem eines Rechners ist dafür zuständig, Daten zwischen den einzelnen Einheiten des Computers zu transportieren. Daher auch der an einen Autobus erinnernde Begriff. Tatsächlich handelt es sich um eine gebündelte Datenleitung. In modernen Rechnern besteht das Bussystem aus mehreren unterschiedlichen Bussen mit unterschiedlichen Leistungsparametern. Der E/A-Bus ist für den Datentransport zwischen externen Geräten (Eingabe, Ausgabe, externe Speicher) und dem Arbeitsspeicher zuständig. Für die Kommunikation zwischen Arbeitsspeicher und den schnellen Registern der CPU sorgt der Daten- bzw. der Befehlsbus. Wir wollen in der Folge der Einfachheit halber allerdings nur von einem gemeinsamen Bus ausgehen.

Speicher

dienen dazu, Daten und Programme während einer Verarbeitung festzuhalten (Arbeitsspeicher) oder auch über längere Zeiträume verfügbar zu haben (Permanentspeicher). In ihrer Funktion sind alle Speicher gleich. Sie können sich Folgen von Nullen und Einsen „merken“. In ihrer Technologie und daher in ihrer Leistungscharakteristik unterscheiden sie sich jedoch einerseits bezüglich der Zeit, die es dauert einen Wert abzuspeichern oder wieder auszulesen und andererseits auch bezüglich ihrer Flüchtigkeit. Der Inhalt des Arbeitsspeichers und der Register verschwindet, wenn der Strom abgeschaltet wird. Der Inhalt von Magnetspeichern (etwa Festplatte, Diskette, USBStick, …) oder optischen Speichern (CD) bleibt jedoch erhalten, auch wenn kein Strom anliegt.

Register

sind schnelle Speicher in teurer Technologie gefertigt. Sie können mit der ALU Schritt halten, weil diese in derselben Technologie gefertigt ist.

Arbeitsspeicher / RAM:

Der Arbeitsspeicher ist jener Bereich, aus dem die CPU sowohl ihr Programm ausliest als auch die von diesem Programm zu verarbeitenden Daten. RAM steht für Random Access Memory. Dies bedeutet, dass die Zugriffsdauer von der konkreten Adresse, auf die zugegriffen wird, unabhängig ist. Früher waren diese Speicher in Magnetkern-Technologie ausgeführt. Heute sind Arbeitsspeicher Halbleiterspeicher, so wie die Register. Allerdings sind sie in einer langsameren und daher billigeren Technologie ausgeführt. Im Arbeitsspeicher stehen die von einem Programm zu verarbeitenden Daten an jenen Stellen, an die sie von diesem Programm eingelesen wurden wie auch das Programm selbst. Fertige Ergebnisse kommen wieder hierher zurück und können hier von der Ausgabe abgeholt werden. Hier werden Daten und Programme gespeichert.

Extern Speicher / Festplatte:

Die Festplatte kann als Standardbeispiel für externe Permanentspeicher angesehen werden. Informationen, die auf der Platte stehen, bleiben dort erhalten, auch wenn man den Rechner abschaltet. Die Platte ist allerdings kein Direktzugriffsspeicher und die Zugriffsdauer hängt davon ab, wo Information gerade auf der Platte steht und auch davon, auf welche Stelle der Platte zuletzt zugegriffen wurde. Selbstverständlich können auch auf der Platte beliebige Informationen abgespeichert werden. So etwa umfangreiche Datenfolgen, aus denen etwas zu berechnen ist (etwa die Buchhaltung eines Unternehmens) oder – wir haben die Formeln aus dem Mathematikunterricht ja auch vielleicht in einem Formelheftchen stehen – Programme, die 
wir für unseren Rechner vorbereitet haben, die aber momentan nicht zur Ausführung gelangen. Doch so wie wir das Formelheftchen nicht rechnen lassen können, sondern erst die Formel lesen und verstehen müssen, damit wir im Kopf dann die zugehörigen Daten einsetzen und die Rechnung ausführen, müssen auch auf der Platte abgespeicherte Programme erst in den Rechner geladen werden, bevor sie ausgeführt werden können.

CPU:

Die Central Processing Unit ist der eigentliche Rechner im Computer. Sie besteht aus schnellen Registern, in denen Operanden auf denen die eigentlichen Befehle (Operatoren) ausgeführt werden, abgelegt sind, aus der ALU und aus dem Steuerwerk.

Rechenwerk / ALU:

Die Arithmetic Logical Unit ist der Kern der CPU und das eigentliche Rechenwerk. Hier werden die Befehle des Maschinenprogramms auf die der ALU zugeordneten Register ausgeführt. Also hier wird addiert, subtrahiert, multipliziert, … Aber es werden eben auch logische Berechnungen (und- sowie oder-Verknüpfungen) durchgeführt.

Das Steuerwerk

besteht im wesentlichen aus einem Befehlsregister und dem Befehlszähler. Es sorgt dafür, dass der jeweils als nächstes auszuführende Befehl aus dem Arbeitsspeicher (RAM) geholt wird und dieser, wenn es sich um einen arithmetischen oder logischen Befehl handelt, von der ALU ausgeführt wird. Wenn es sich um einen Befehl handelt, der den Programmablauf steuert (Verzweigung, Sprung), wird er nur im Steuerwerk ausgeführt.

Der Befehlszähler

ist ein Register, in dem die Speicheradresse des eben vom Steuerwerk aus dem RAM geholten Befehls steht. Ist dies ein arithmetischer oder logischer Befehl wird der Befehlszähler im Takt der Ausführung dieses Befehls so erhöht, dass er nun die Adresse des nächsten, im Speicher unmittelbar nachfolgenden Befehls enthält. Bei Sprungbefehlen wird er auf den Wert gesetzt, der als Sprungziel im Programm angegeben ist.

4. Beispiel Programm

Beginnen wir mit der Formel

Beginnen wir mit dieser Formel und versuchen wir gemeinsam das zugehörige Programm zu entwickeln. 

O = 2*( l * b + (l+b) * h)

Dazu ist erst wichtig, festzustellen, dass wir in der Formel 4 Variable haben (O, l, b, h), für die wir Speicherplatz reservieren müssen. Wir nehmen dabei an, dass wir für jede dieser Variablen, wie auch für jeden dann zu schreibenden Befehl ein Speicherwort benötigen. Also reservieren wir dafür in dem für unser Programm vorgesehenen Speicherbereich

S1                                            Platz für O

S2                                            Platz für l

S3                                            Platz für b

S4                                            Platz für h 

Sodann stellen wir fest, dass wir wohl erst einmal die Werte für l, b und h von der Eingabeeinheit einlesen müssen. Also:

S5     LIES  s2                           lies l von Eingabeeinheit

S6     LIES  s3                           lies b von Eingabeeinheit

S7     LIES  s4                           lies h von Eingabeeinheit 

An dieser Stelle können wir festhalten, dass unser Programm nicht sehr benutzerfreundlich ist, da wir uns merken müssen, in welcher Reihenfolge l, b und h eingegeben werden müssen. Das soll uns momentan aber noch nicht sehr stören.  

Da wir nun die Daten dort haben, wo sie sein sollten, können wir nun mit der eigentlichen Berechnung beginnen.

S8     LADE s2, r1                     lade Wert von l in Register 1

S9     LADE s3, r2                     lade Wert von b in Register 2

S10 MULT r1, r2, r3                 führe auf die in Register 1 und Register 2 gespeicherten Werte eine Multiplikation aus und schreibe das Ergebnis nach Register 3 

Nun hängt es davon ab, wie viel Register unsere CPU hat ob wir die weiteren Werte in anderen noch freien Registern abspeichern können oder ob wir Zwischenergebnisse in den Speicher zurück schreiben und bei Bedarf frisch holen müssen. Wir nehmen an, wir hätten nur 3 Register, also müssen wir das Ergebnis der Multiplikation zurück schreiben. Dafür können wir die bisher noch unbenutzte Speicheradresse s1 verwenden. 

S11 SPEICHERE r3, s1             speichere das Zwischenergebnis l*b einstweilen in die Speicherzelle s1

Als nächstes kommt wohl die Addition (l+b) an die Reihe. Doch da wir die Werte von l und b bereits in Registern haben, müssen wir sie nicht holen, sondern können sofort addieren.

S12 ADD r1, r2, r3                    führe auf den noch immer in Register 1 und Register 2 gespeicherten Werten eine Addition aus und schreibe das Ergebnis nach Register 3

S13  LADE s4, r2                       lade den Wert von h in das nun nicht mehr benötigte Register 2

S14 MULT r3, r2, r1                   führe auf die in Register 3 (Zwischenergebnis des Klammerausdrucks) und Register 2 (Wert von h) gespeicherten Werte eine Multiplikation aus und schreibe das Ergebnis in das inzwischen nicht mehr benötigte Register 1

Wir haben somit in Register 1 den Flächeninhalt der Vorderseite und eines Seitenteile, also des halben Mantels stehen. Wir müssen nun noch den Flächeninhalt der Grundfläche, die wir zwischenzeitlich in Zelle s1 abgespeichert haben holen, addieren und die so erhaltene Fläche mit dem konstanten Wert 2 multiplizieren.

S15 LADE  s1, r2                                 lädt das in s1 abgespeicherte Zwischenergebnis in das inzwischen nicht mehr benötigte Register 1

S16  ADD r1, r2, r3                             addiert den in Register 1 gespeicherten Wert des halben Mantels zum eben in Register 2 geladenen Wert der Grundfläche. Somit steht nun der Wert der halben Oberfläche in Register 3

S17 MULT* r3, 2                                 Diese Multiplikation ist eigentlich ein neuer Befehl. Hier wird nicht mit einem in einer Variablen sondern mit der Konstanten „2“ multipliziert. Daher lautet der Befehlscode auch nicht MULT sondern MULT*. 

Speziell die Multiplikation mit 2 ist eine wichtige Spezialoperation, da sie im Binärsystem sehr einfach durch ein Left-Shift des jeweiligen Registerinhalts bewirkt werden kann.

 

S18 SPEICHERE r3, s1                     speichert das nunmehr in Register 3 enthaltene Endergebnis in die Zelle s1 
S19  SCHREIB s1                             gibt den in s1 enthaltenen Wert auf der Ausgabe aus.
S20 STOP                                        beendet dieses Programm

Wenn Zeit ist, ist es sicherlich hilfreich hier die Frage zu provozieren, warum der Wert aus Register 3 erst noch nach Arbeitsspeicherzelle s1 geschrieben werden musste, bevor er ausgegeben werden konnte. 

Die Antwort liegt in der unterschiedlichen Geschwindigkeit der Geräte. Ein-/Ausgabe ist langsam und erfolgt daher stets indirekt über den Arbeitsspeicher. 

 

5. Anleitung Rollenspiel

Simulation des von Neumann-Rechners

Im Folgenden sollt ihr die Aufgabe dieses Rechners übernehmen indem jede Funktionseinheit im Computer durch eine Person besetzt wird. Das folgende Schema für die Animation zeigt die Aufteilung in die Aufgabenbereiche. Hierfür kann man entweder je Funktionseinheit einen Tisch verwenden, oder man stellt einige Tische zusammen, sodass der hellgelbe Bereich sich auf einem großen Tisch befindet.

Wesentlich ist dabei, dass die „CPU-Komponenten“ relativ nah nebeneinander sitzen. Der „Bus“ kann durchaus auch als Pendler zwischen Speicherbereich und CPU bzw. Speicherbereich und Ein- und Ausgabe eingesetzt werden. Das kostet allerdings Zeit.

Bevor wir versuchen, auch für die Flächenberechnung des Dreiecks ein Programm zu schreiben, wollen wir das Oberflächenprogramm auf einem von euch nachgebildeten Computer ausführen lassen. 

    • Dazu benötigen wir:

      • Eingabe: 1 TN
      • Bus: 1 TN
      • CPU: 1 TN Steuerwerk oder wenn genügend Personen vorhanden sind:
          • 1 TN Befehlszähler und
          • 1 TN Befehlsregister , sowie
        • 1 TN Rechenwerk
      • 3 Register: je 1 TN 
      • RAM: 1 TN
      • Ausgabe: 1 TN

Die TN, die nicht an der Animation teilnehmen können, bekommen Beobachterrollen zugeteilt. 

  1. Beobachten aus Sicht der Eingabe
  2. Beobachten aus Sicht der Ausgabe: 1 TN prüft ob die Ausgabe stimmt
  3. Globale Beobachtung bzw. Beobachtung der einzelnen „Bauteile“

Jene TN, die Eingabe bzw. Ausgabe beobachten haben auch die Rolle der Benutzer. Das bedeutet, sie definieren die Werte der Daten, die vom Programm verarbeitet werden sollen.

Sollte eure Gruppe aus wenigen Teilnehmern bestehen, kann man problemlos die Betreuung der drei Register einer Person zuordnen. Ebenso kann man Eingabe und Ausgabe einer Person zuordnen. Es sollten aber jedenfalls unterschiedliche Personen für Ein-/Ausgabe, Bus, Steuerwerk, Rechenwerk, Register und RAM, also mindestens 6 Personen vorhanden sein.  

Bei mehr Teilnehmern als benötigt, kann man auch noch das Steuerwerk trennen und unterschiedliche Personen mit den Aufgaben Befehlszähler und Befehlsregister beauftragen. 

Die Aufgabenzuweisung erfolgt nun entsprechend den Aufgaben, die die jeweiligen Komponenten auch tatsächlich im Computer haben. 

 

 


Start der Simulation
  1. Programm in den Speicher ablegen

Da für den Computer Code auch nur eine spezielle Form von Daten ist, lesen wir erst einmal das Programm ein. Dies bedeutet:

o   Eingabe gibt die Programmzeilen bzw. Programmkärtchen in der richtigen Reihenfolge an dem Bus.

o   Der Bus legt sie mit S1 beginnend auf die jeweils nächste freie Speicherstelle, S1 also auf die Speicherstelle s1, S2 auf s2 u.s.w.

Um diesen Schritt wirklich auszuführen, fehlt uns die Zeit. Wir haben das Programm ja schon entwickelt und dieses nun wie es ist, in den Speicher eingelesen.

Ist dieser Vorgang abgeschlossen, können wir das Programm starten. 

o   Dazu wird der Befehlszähler-TN (Steuerwerk) einmal auf 0 gesetzt. Er bekommt ein leeres Blatt Papier. Dann muss ihm noch mitgeteilt werden, wo im Speicher der erste ausführbare Befehl liegt (dies mitzuteilen ist noch Aufgabe des Betriebssystems). In unserem Fall ist das Zelle 5. Er notiert also 5 auf seinem Zettel. Weiters müssen jene Beobachter, die Benutzer sind, drei Zettelchen mit den Werten für l, b und h (Vorsicht, genau in dieser Reihenfolge!) vor die Eingabe legen.

o   Der Befehlsregister-TN (Steuerwerk-TN) liest (laut !) nun den Inhalt jener Zelle des Arbeitsspeichers, die auf dem Zettel des Befehlszählers notiert ist. (Anfangs also den Inhalt von s5). Er schreibt den Wert auf ein Kärtchen und legt dieses in das Befehlsregister.

Zur Beschleunigung des Verfahrens empfiehlt es sich, hierfür einen Stapel von Kärtchen zu haben, auf denen jeweils ein Befehl und Unterstreichungen für die zu diesem Befehl gehörenden Parameter eingetragen sind. Der BR-TN muss dann nur das richtige Kärtchen nehmen und die vom Speicher gelesenen Parameter (Adressen) eintragen. 

o   Der BR-TN prüft, ob die eben gelesene Operation eine Rechenoperation oder eine Speicheroperation ist. Ist im Befehlsregister (BR) eine arithmetische Operation, gibt sie der BR-TN an das Rechenwerk (ALU) weiter. Ist eine Speicheroperation im BR, wird das Kärtchen an den Bus-TN weitergegeben.  o Bei Datentransfers (Operation LADE oder SPEICHERE) wird das Befehlszettelchen an den Bus-TN gegeben. Dieser schreibt den Wert, der in der angegebenen Abholadresse steht auf ein Kärtchen und legt dieses auf die angegebene Zieladresse (und sagt auch laut, was sie oder er eben ausführte). 

Der ursprünglich in der Zieladresse gespeicherte Wert ist damit nicht mehr ersichtlich. Er wurde durch den neuen Wert überschrieben.  

Ebenso wird bei LIES oder SCHREIB der Befehl an den Bus weitergegeben. Dieser sorgt in diesem Fall für den Datentransfer zwischen Eingabeeinheit und Speicher bzw. zwischen Speicher und Ausgabeeinheit.

o   Wenn der Rechenwerk-TN einen Befehl bekommen hat, führt er diesen auf den ange-gebenen Registern aus. Dazu fragt es die im Befehl angesprochenen Register nach deren jeweils aktuellen Wert. Diese lesen ihn laut vor.   as Rechenwerk notiert die Berechnung auf einem Kärtchen, führt sie aus, liest das berechnete Ergebnis laut vor und sagt, an welches Register dieses Ergebnis übergeben wird. Dieses Register legt das Ergebnis als neuen Wert auf seinen Kärtchenstapel. (Man sieht immer nur den jeweils aktuellen Wert). 

Die Beobachter sollen dabei prüfen, ob das Rechenwerk auch tatsächlich korrekt rechnet.

o   Nachdem ein Befehl ausgeführt wurde, ruft die ausführende Komponente (Bus, Rechenwerk) deutlich „fertig“. Auf dieses „fertig“ muss der Befehlszähler-TN warten. Jede Befehlsausführung, gleichviel ob vom Steuerwerk direkt ausgeführt oder vom Rechenwerk ausgeführt, führt zur Erhöhung des Befehlszählers. Der Befehlszähler-TN erhöht also die auf seinem Notizblatt (BZ) notierte Zahl um 1.

o   Sobald diese Erhöhung erfolgte, also der Befehl fertig ausgeführt ist, liest der 

Befehlsregister-TN (Steuerwerk-TN)  den laut Befehlszähler nächsten Befehl vom Speicher, notiert ihn wieder auf einem Kärtchen, legt dieses ins Befehlsregister und entscheidet, ob der am Zettelchen stehende Befehl direkt auszuführen ist oder an das Rechenwerk weitergegeben werden soll. 

 

2. Der Befehlszyklus – Erklärung der einzelnen Schritte:
    1. Befehl holen 
      a.    Befehl wird aus dem Hauptspeicher (RAM) geholt, im Befehlszähler steht drinnen, welcher Befehl der nächste ist.  
      b.    Befehl wird ins Befehlsregister geschrieben.
    2. Befehlszähler erhöhen 
      a. Befehlszähler wird um die Befehlslänge erhöht (in unserem Fall war dies stets 1)
    3. Befehl decodieren 
      a.    Berechnen, wo die Operanden im RAM (Hauptspeicher) stehen 
      b.    Steuersignale für den Befehl/Operator werden berechnet
    4. Operanden holen 
      a. Die Operanden werden aus dem RAM (Hauptspeicher) geholt und in den Registern gespeichert.
    5. Befehl ausführen 
      a.    ALU (Rechenwerk) berechnet nun das Ergebnis.  
      b.    Ergebnis wird wieder ins Register geschrieben.
    6. Ergebnis speichern 
      a. Ergebnis wird im RAM (Hauptspeicher) abgelegt und steht dort für die Anforderung der Ausgabe bereit. 

Somit haben wir das soeben Durchgespielte gefestigt.
In dieser Phase sollten die Beobachter vorwiegend tätig sein und beschreiben, wie der „Rechner“ gearbeitet hat.
Wenn das nicht möglich ist, sollen die Teilnehmer, die die einzelnen Komponenten gespielt haben, helfen und berichten, was ihre Aufgabe war.  

 _

6. Flussdiagramm Rollenspiel

Vereinfachtes Flussdiagramm zur Simulation des von Neumann-Rechners

  1. Start der Simulation

    • Eingabe: Liefert die Programmzeilen an den Bus.
  2. Programm in den Speicher ablegen

    • Bus: Überträgt die Programmzeilen in den RAM.
  3. Initialisierung

    • Befehlszähler (BZ): Wird auf 0 gesetzt, Beginn bei Speicherzelle 5.
    • Benutzer (Beobachter): Legen Zettelchen mit Werten für l, b, h vor die Eingabeeinheit.
  4. Befehl holen

    • Befehlszähler (BZ): Zeigt auf die Speicherzelle mit dem nächsten Befehl.
    • Befehlsregister (BR): Liest den Befehl aus dem RAM und speichert ihn.
  5. Befehl decodieren

    • Befehlsregister (BR): Prüft den Befehl.
      • Rechenoperation: Weitergabe an das Rechenwerk (ALU).
      • Speicheroperation: Weitergabe an den Bus.
  6. Operanden holen (bei Speicheroperation)

    • Bus: Holt die Operanden aus dem RAM und liefert sie an die Zieladresse (z.B. Register).
  7. Befehl ausführen (bei Rechenoperation)

    • Rechenwerk (ALU): Führt die Berechnung durch.
    • Register: Speichert das Ergebnis.
  8. Ergebnis speichern (bei Rechenoperation)

    • Register: Ergebnis wird im RAM abgelegt.
    • RAM: Speicherplatz wird für die Ausgabe vorbereitet.
  9. Befehlszähler erhöhen

    • Befehlszähler (BZ): Erhöht sich um 1 nach jeder Befehlsausführung.
  10. Wiederholung

  • Befehlsregister (BR): Liest den nächsten Befehl und entscheidet über die Weitergabe.
  • Befehlszähler (BZ): Zeigt auf den nächsten Befehl.
  1. Ende
  • Programm abgeschlossen, Simulation beendet.

Beobachterrollen:

  • Eingabe- und Ausgabebeobachter: Prüfen, ob Eingabe und Ausgabe korrekt sind.
  • Globale Beobachter: Überwachen den gesamten Ablauf und die Korrektheit der Schritte.

7. Erweitertes Programm

Code für die Berechnung der Fläche eines Dreiecks, ausgehend von der

Formel

F = g * h / 2. 

In diesem Fall haben wir nur 3 Variable, F, g, h. In der Beispielslösung wird Speicherplatz in dieser

Reihenfolge angelegt. Tatsächlich wäre jede beliebige Reihenfolge korrekt.

S1                                    Platz für F

S2                                    Platz für g

S3                                    Platz für h 

Es folgen die Leseoperationen für g und h. 

S4       LIES  s2                  lies g von Eingabeeinheit

S5       LIES  s3                  lies h von Eingabeeinheit 

nun können wir die beiden Operanden in die Register laden. Die Registerzuordnung ist wieder beliebig.

S6       LADE s2, r1           lade Wert von g in Register 1

S7       LADE s3, r2           lade Wert von h in Register 2

S8        MULT* r3, 1/2      Hier haben wir wieder eine Operation mit einer Konstanten.  

Eigentlich sollte durch 2 dividiert werden. Doch dies entspricht der viel einfacher durchzuführenden Multiplikation mit ½ (oder 2-1). Die tatsächliche Realisierung wird durch ein Verschieben des Registerinhalts nach Rechts, also Right-Shift r3 ausgeführt. 

Wir haben somit das gewünschte Ergebnis in Register 3 stehen. Dieses ist somit in den Speicher zu schreiben und von dort auszugeben.

S9        SPEICHERE r3, s1   speichert das nunmehr in Register 3 enthaltene Endergebnis in Zelle s1
S10      SCHREIB s1            gibt den in s1 enthaltenen Wert auf der Ausgabe aus. 
S11      STOP                      beendet dieses Programm 

8. ▸ 2 · Rechnen im Binärsystem

Addition und Subtraktion im Binärsystem (Zweierkomplement) sowie negative Binärzahlen.

9. Und nun: NEGATIVE Binärzahlen

Einleitung Wertebereich / negative Ganzzahlen

Natürlich können wir nicht einfach ein Minuszeichen vor eine duale Zahl stellen, dies würde ja wieder Speicherplatz benötigen. Da wir nur die Information 0 und 1 speichern wollen, haben wir also die Möglichkeit mit einer 0 oder 1 zu kennzeichnen ob wir eine Zahl positiv oder negativ interpretieren. Dazu haben wir uns im Teil Subtraktion ja schon mit der Bildung von Komplementen befasst. Wir entwickeln die negativen Zahlen in drei Schritten.

 

Positive Ganzzahlen

Die bisherigen Überlegungen lassen uns nur positive Ganzzahlen darstellen. Die kleinste Zahl ist 0, die größte Zahl hängt von der zur Verfügung stehenden Speichermenge ab. Wir haben uns bisher auf ein Byte (8bit = 0-256)  beschränkt. Normalerweise werden aber je nach Programmiersprache mehrere Bytes zu einer Speicherstelle zusammengefasst. Typischerweise sind das zwei oder vier Bytes. Das bedeutet, dass die größten darstellbaren Dezimalzahlen dann 65535 beziehungsweise 4294967295 sind.
 
 

Negative Ganzzahlen -> 1. Versuch

Der nächste Schritt ist jetzt die Einführung negativer Zahlen. Dies erscheint recht einfach, ist jedoch ziemlich schwer. Ich werde die negativen Zahlen in drei Schritten erklären. Bitte lesen Sie mindestens bis zum dritten Versuch, denn erst dort werden die "richtigen" negativen Zahlen beschrieben.
Wir beschränken uns der Einfachheit halber wieder auf ein Byte. Selbstverständlich ist das Prinzip wieder auf mehrere Bytes als Speicherbereich übertragbar.
Wir kennzeichnen negative Zahlen einfach mit einem führenden Bit. Diese Bits nennt man manchmal auch "flags".
Aus 1 = 00000001 wird dann -1 = 10000001.
Aus 17 = 00010001 wird dann -17 = 10010001.
 

Negative Ganzzahlen -> 2. Versuch

Die Version 1 der negativen Ganzzahlen hat jedoch einen entscheidenden Nachteil. Bei den positiven Ganzzahlen erreiche ich durch die Addition von 1 jeweils die nächst größere Zahl. Bin ich bei der maximalen Zahl angekommen, so führt die Addition von 1 durch den "Überlauf" (Überschreitung der Speichergröße) dazu, dass ich wieder am unteren Ende ankomme. Also 11111111+00000001=00000000

Bei negativen Zahlen laut Version 1 führt die Addition von 1 jedoch nicht - mathematisch richtig - zur größeren Zahl, sondern zur kleineren. Beispiel: 10000001 + 00000001 = 10000010 dies ist jedoch mathematisch falsch, denn in dezimaler Schreibweise steht hier -1 + 1 = -2 !!! Aus diesem Grund stellt man negative Zahlen nicht nur durch die Kennzeichnung mit dem ersten Bit dar, sondern man verwendet dazu die oben schon eingeführte Komplementbildung.

Das Einerkomplement 

Durch die Bildung des Einerkomplementes besitzt unser Wertebereich plötzlich zwei Nullen, nämlich 00000000 und 11111111. Addiere ich zu -1 = 11111110 die 1 = 00000001, so bekomme ich 11111111. D. h. wir haben noch einen logischen Fehler in unseren Überlegungen. Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplem

Das Zweierkomplement 

Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplement der Null ergibt dann wieder Null. Aus 00000000 wird im Einerkomplement 11111111 und durch die Addition von 00000001 und den Überlauf wieder zu 00000000.

 
 
 

Negative Ganzzahlen -> 3. Versuch

Geschafft! Die negativen Zahlen werden also durch Bildung des Zweierkomplementes dargestellt. Hier ein paar Beispiele:
1 = 00000001 wird zu -1 = 11111111
5 = 00000101 wird zu -5 = 11111011
17 = 00010001 wird zu -17 = 11101111
Ich kann also immer noch am ersten Bit erkennen, ob eine Zahl negativ oder positiv ist.
 

Wertebereich von negativen Ganzzahlen

Nehme ich ein Byte als Speichergrenze, so bekomme ich folgende interessante Zahlen
00000000 = 0
01111111 = 127
10000000 = -128
Mein ehemaliger Wertebereich von 0 bis 255 verändert sich also zu -128 bis +127. Auch hier habe ich wieder insgesamt 256 verschiedene Zahlen. Nur unsere Interpretation der Zahlen ändert sich.

10. Übung - Subtraktion von Binärzahlen

Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.

a) 
 1001 1001 0101 1101
-         101 1101
b)
1111 1010 0101 1101
-1101 0111 1010 1001
c)
1111 0110 0000 1000
- 111 0000 1011 0101

11. Lösung - Subtraktion von Binärzahlen

Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.

a) 
Zahl 1 = 1001 1001 0101 1101
Zahl 2 =          101 1101

Zahl 2 mit Nullen auffüllen -> 0000 0000 0101 1101
Zahl 2 zu Einerkomplement -> 1111 1111 1010 0010
Einerkomplement zu Zweierkomplement (+1)
-> 1111 1111 1010 0011

Zahl 1 + Zweierkomplement
1001 1001 0101 1101
+1111 1111 1010 0011
--------------------
=1001 1001 0000 0000
Hinweis: Falls am Ende ein Übertrag übrig bleibt wird dieser Ignoriert.

b)
Zahl 1 = 1111 1010 0101 1101
Zahl 2 = 1101 0111 1010 1001

Zahl 2 mit Nullen auffüllen -> 1101 0111 1010 1001
Zahl 2 zu Einerkomplement -> 0010 1000 0101 0110
Einerkomplement zu Zweierkomplement (+1)
-> 0010 1000 0101 0111

Zahl 1 + Zweierkomplement
1111 1010 0101 1101
+0010 1000 0101 0111
--------------------
=0010 0010 1011 0100

c)
Zahl 1 = 1111 0110 0000 1000
Zahl 2 = 111 0000 1011 0101

Zahl 2 mit Nullen auffüllen -> 0111 0000 1011 0101
Zahl 2 zu Einerkomplement -> 1000 1111 0100 1010
Einerkomplement zu Zweierkomplement (+1)
-> 1000 1111 0100 1011

Zahl 1 + Zweierkomplement
1111 0110 0000 1000
+1000 1111 0100 1011
--------------------
=1000 0101 0101 0011

12. Übung 2 - Binärzahlen

a) Addition
  11002 + 10012   11101012 + 101111012   10110112 + 10001102
 
b) Subtraktion
  1101112 - 110102   111101002 - 10111102   1011011102 - 11012

13. Übung 2 - Lösungen

a) Addition
  101012   1001100102   101000012
 
b) Subtraktion
  111012   100101102   1011000012

14. ▸ 3 · Exkurs: weitere Zahlensysteme

Hexadezimalsystem, Farben als Hex-Werte und der Vier-Farben-Satz.

15. Zahlensysteme und Farben

Wie lassen sich mit einem Computer einfach alle Farben darstellen, die es gibt? Wie könnt ihr damit eine eigene Homepage gestalten?

Dafür werden komische Farbcodes verwendet wie #000000, #A1B2F1 oder #FFFFFF

Wie das funktioniert, erfahrt ihr im Folgenden.

1. Zahlensysteme

Bisher haben wir schon 2 Zahlensystem kennengelernt. Das Dezimalsystem kennt ihr schon, seit dem ihr Zahlen kennt und ihr arbeitet täglich damit. Das Binärsystem nutzen digitale Computer für ihre Arbeit. Es gibt aber noch viele weitere Systeme, mit spannenden Einsatzmöglichkeiten. Mit denen wollen wir uns heute beschäftigen.

Bevor wir mit den neuen Systemen starten, wiederholen wir noch einmal kurz die bekannten Systeme. Das Binärsystem hat die 2 Ziffern 0 und 1. Deshalb ist die Basis 2. Von der Basis 2 können wir die Stellenwerte ableiten: 16, 8, 4, 2, 1. Diese können wir mit der Basis berechnen 24, 23, 22, 21, 20. Kennen wir die Stellenwerte, so können wir die Zahlen aus verschiedenen Zahlensystemen ineinander umwandeln.

Zur Erinnerung:

Binärsystem in Dezimalsystem: 10102 = 1•8 + 0•4 + 1•2 + 0•1 = 8 + 2 = 1010 (die tiefgestellten Zahlen geben die Basis des Zahlensystems an).

Dezimalsystem in Binärsystem: 910 = 10012.


Aufgabe 1: Kopiert folgende Tabelle unter der Überschrift Zahlensysteme in euren Hefter und füllt die fehlenden Lücken.

Name Basis Ziffern Stellenwerte Beispielzahl
Binärsystem 2 0,1 8,4,2,1
Vierersystem 0,1,2,3
Oktalsystem 8 0,1,2,3,4,5,6,7 512,64,8,1 178
Dezimalsystem 4123510
Hexadezimal 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 4096,256,16,1 FF16

2. Das Hexadezimalsystem

Dieses Hexadezimalsystem sieht aber komisch aus. Buchstaben als Ziffern.

Lassen wir uns dieses Zahlensystem doch einmal genauer erklären (nur bis Minute 3:15!)

Wer immer noch nur Bahnhof versteht, findet hier noch eine kurze Erklärung
(

)


16. Übung Hexadezimal

Um ein bisschen warm mit den Hexadezimalzahlen zu werden, wandeln wir mal ein paar Dezimalzahlen in Hexadezimalzahlen um.

110 = 116

510 = 516

1010 = A16 (sieht komisch aus, aber Buchstaben sind jetzt Ziffern)

1110 = B16

1210 = C16

1310 = D16

1410 = E16

1510 = F16


Jetzt wird es spannend. Was ist denn die 1610 im Hexadezimalsystem. Ganz einfach. Da wir mit einer einstelligen Hexadezimal nur bis zur 1510 zählen können, brauch wir jetzt eine neue Stelle.

1610 = 1016 da 1 • 16 + 0 • 1

Stelle 3 2 1
Stellenwert 162=256 161=16 160=1


Wie bei der Umrechnung Dezimal in Binär suchen wir uns zunächst den größten Stellenwert, der in unsere Zahl gerade noch so hinein passt.

Rechnung Quotient Rest
16:256 0 16
16:16 1 0
0:1 0 0


Jetzt lesen wir wieder einfach die Quotientenspalte von oben nach unten und haben das Ergebnis der Umrechnung: 1610 = 01016


(Wie im Dezimalsystem auch, kannst du die „führende Nullen“ oft weglassen. 010 ist das gleiche wie 10)

Jetzt gucken wir mal, wie gut du es wirklich verstanden hast:



17. Farben mit Hexadizimal

Wozu jetzt das ganze. Man kann mit Hexadezimal Farben darstellen. Lassen wir uns das mal erklären

Farben können also im Hexadezimalsystem dargestellt werden.

Aufgabe 1:

Probieren wir nochmal spielerisch aus. Ihr müsst einfach die Farbe erraten, die sich hinter dem angezeigten Code verbirgt:
Bis dein Highscore am Unteren Rand 7 zeigt! Klick hier!

Alternative

Aufgabe 2

Fülle die Tabelle mit den richtigen Hexadezimalzahlen: Mache einen Screenshot und kopiere ihn in deinen Hefter!

 
 

https://www.sporcle.com/games/drhbball14/hexnumbers?t=hexadecimal

Farben und HTML

Die Farben von Nationalflaggen sind so toll, sodass wir eine eigene Homepage über sie erstellt haben. Allerdings fehlen noch die Farben.

Aufgabe

  • Öffnet die Datei flaggen_fehlerhaft.html. (Herunterladen: Rechtsklick => Ziel Speichern unter)
  • Recherchiert, wie die Flaggen farblich gestaltet sind.
  • Öffnet die Datei mit dem Programm BlueGriffon. Findet die Farbcodes in den Daten. Diese beginnen alle mit einem ‚#‘-Zeichen.
  • Ändert die Farbcodes, sodass die Flaggen korrekt dargestellt werden.
  • Zusatz für Experten: Füge weitere Flaggen hinzu.
 

Zusatz: für die Schnellen: http://www.hexinvaders.com/