23.12.2012 Aufrufe

Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...

Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...

Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>ReSim</strong> 2A<br />

<strong>Handbuch</strong> <strong>zum</strong><br />

<strong>Rechner</strong>-<strong>Simulationsprogramm</strong><br />

<strong>ReSim</strong><br />

Version 3.10<br />

<strong>HS</strong> <strong>Harz</strong><br />

Fachbereich<br />

Automatisierung und Informatik<br />

von<br />

Dipl. Inf., Dipl.-Ing. (FH) Michael Wilhelm<br />

http://mwilhelm.hs-harz.de<br />

mwilhelm@hs-harz.de<br />

Version 15. Oktober 2011


Inhaltsverzeichnis -2-<br />

Inhaltsverzeichnis<br />

1 Einführung ......................................................................................................................... 5<br />

1.1 Eigenschaften der Version 3 5<br />

1.1.1 Farbdarstellung 5<br />

1.2 Löschen der Register 5<br />

1.3 Löschen des Speichers 5<br />

1.4 Debugger 5<br />

1.5 Temp-Dateien 6<br />

1.6 John von Neumann 6<br />

1.7 Steuerwerk 7<br />

1.8 Rechenwerk 8<br />

1.9 Ein- und Ausgabeeinheit 8<br />

1.10 Register 8<br />

1.11 Datenbus 8<br />

1.12 Adressbus 8<br />

2 Aufbau des Programms..................................................................................................... 9<br />

2.1 Oberfläche 9<br />

2.1.1 Menüstruktur 9<br />

2.1.1.1 Menü Datei 9<br />

2.1.1.2 Ansicht 10<br />

2.1.1.3 Befehle 10<br />

2.1.1.4 Reset 10<br />

2.1.1.5 Start 10<br />

2.1.1.6 Optionen 11<br />

2.1.1.7 Hilfe 12<br />

2.1.2 Schalterleiste 12<br />

2.2 Grafische Elemente 13<br />

2.2.1.1 Ein- und Ausgabeeinheit 13<br />

2.2.1.2 Speicher 14<br />

2.2.1.3 Register 15<br />

2.2.1.4 Steuerwerk 15<br />

2.2.1.5 Programmbemerkungen 16<br />

2.2.1.6 Rechenwerk 16<br />

2.3 Befehlsliste von <strong>ReSim</strong> 16<br />

2.3.1 Transportbefehle 17<br />

2.3.2 Arithmetikbefehle 17<br />

2.3.3 Logikbefehle 18<br />

2.3.4 Schiebebefehle 18<br />

2.3.5 Sprungbefehle 19<br />

2.3.6 E/A-Befehle 19<br />

2.3.7 Steuerbefehle 20<br />

2.4 Befehlseingabe 21<br />

2.4.1 Transportbefehle 21<br />

2.4.2 Arithmetikbefehle 21<br />

2.4.3 Logikbefehle 22


Inhaltsverzeichnis -3-<br />

2.4.4 Schiebebefehle 22<br />

2.4.5 Sprungbefehle 22<br />

2.4.6 E/A-Befehle 23<br />

2.4.7 Steuerbefehle 23<br />

3 Befehlsgruppen ................................................................................................................ 24<br />

3.1 Einlesen einer Zahl 24<br />

3.2 Register mit einem Wert belegen 24<br />

3.3 Operation auf einem Register und die Speicherung 24<br />

3.4 Sprung, wenn Akku größer Null 25<br />

4 Beispiele ............................................................................................................................ 26<br />

4.1 Einfache Beispiele 26<br />

4.1.1 Kopieren einer Konstante in den Akkumulator (Bsp1) 26<br />

4.1.2 Kopieren und addieren von Konstanten (Bsp2) 26<br />

4.1.3 Einlesen einer Zahl, kopieren ins Register Null (Bsp3) 29<br />

4.1.4 Berechnen einer Formel (Bsp4) 31<br />

4.1.5 Bestimmen des Maximum dreier Zahlen 32<br />

4.1.6 Bestimmen des Maximum beliebiger Zahlen 33<br />

4.1.7 Setzen von Bits (Bsp5) 34<br />

4.1.8 Abfragen von Bits (Bsp6) 34<br />

4.1.9 Maximal Bestimmung (Bsp7) 36<br />

4.2 Komplexere Beispiele 38<br />

4.2.1 Berechnen einer Summe (Bsp8) 38<br />

4.3 Schwere Beispiele 40<br />

5 Debugger........................................................................................................................... 42<br />

5.1 Eigenschaften 42<br />

5.2 Vorgehensweise 42<br />

6 Grundlagen....................................................................................................................... 44<br />

6.1 Logische Verknüpfungen 44<br />

6.1.1 Beispiele 44<br />

6.2 Zahlendarstellungen 45<br />

6.2.1 Zahlenkonvertierung zwischen 2, 8 und 16er-System 46<br />

6.3 Einer-Komplement 47<br />

6.4 B-Komplement 47<br />

7 Literatur ........................................................................................................................... 48<br />

8 Indexverzeichnis .............................................................................................................. 49


Abbildungsverzeichnis -4-<br />

Abbildungsverzeichnis<br />

Abbildung 1 Prinzip-Skizze eines John-von-Neumann-<strong>Rechner</strong>s 7<br />

Abbildung 2 Oberfläche von Resim 9<br />

Abbildung 3 Einstellungsfenster bzgl. der Zeiten 11<br />

Abbildung 4 Einstellungsfenster der Profi-Optionen 11<br />

Abbildung 5 Einstellungsfenster bzgl. der Farben 12<br />

Abbildung 6 E/A-Einheit 13<br />

Abbildung 7 Speicher 14<br />

Abbildung 8 Ändern der Sprungadresse 14<br />

Abbildung 9 Register 15<br />

Abbildung 10 Dialogfenster für ein Register 15<br />

Abbildung 11 Steuerwerk 15<br />

Abbildung 11 Programmbemerkungen 16<br />

Abbildung 12 Rechenwerk 16<br />

Abbildung 13 Eingabe einer Zahl in die Eingabeeinheit 20<br />

Abbildung 14 Eingabe mit Radiobutton 20<br />

Abbildung 15 Bild der Transportbefehle 21<br />

Abbildung 16 Bild der Arithmetikbefehle 21<br />

Abbildung 17 Bild der Logikbefehle 22<br />

Abbildung 18 Bild der Schiebebefehle 22<br />

Abbildung 19 Bild der Sprungbefehle 22<br />

Abbildung 20 Bild der E/A-Befehle 23<br />

Abbildung 21 Bild der Steuerbefehle 23<br />

Abbildung 22 Sprung, wenn Akku > 0 25<br />

Abbildung 23 Konstante 122 in den Akku 26<br />

Abbildung 24 Konstante 122 in den Akku 27<br />

Abbildung 25 Adieren einer Konstante <strong>zum</strong> Akkumulator 27<br />

Abbildung 26 Wert des Akkumulators ins Register Null kopieren 28<br />

Abbildung 27 Bezeichnung in ein Register eintragen 28<br />

Abbildung 28 Ergebnis des zweiten Beispiels 29<br />

Abbildung 29 Auswahl des Befehls „Lies Zahl in E/A-Einheit" 29<br />

Abbildung 30 Wert des Akkumulators ins Register Null kopieren 30<br />

Abbildung 31 Bezeichnung in ein Register eintragen 30<br />

Abbildung 32 Programm bsp4 32<br />

Abbildung 33 Debugger Ansicht 42<br />

Abbildung 34 Debugfenster 43


Einführung -5-<br />

1 Einführung<br />

Das vorliegende Programm dient dazu, die John-von-Neumann-Architektur an Hand von<br />

Beispielen näher zu erläutern. Dieses Programm wurde als erstes von Herr Meißner als<br />

Abschlussarbeit entwickelt. Danach als MFC-Programm portiert. Die aktuelle Fassung wurde<br />

mit Delphi programmiert und hat etliche Erweiterungen erfahren. Eine Java-Version ist auch<br />

auf meiner Homepage unter der Rubrik „Download/Resim“ zu finden<br />

1.1 Eigenschaften der Version 3<br />

1.1.1 Farbdarstellung<br />

• Es gibt nun bei den Zuweisungen Akku zu Register unterschiedliche Farben. Damit<br />

kann man die Richtung besser unterscheiden. Der Befehl „Mov Reg, Akku“ wird in<br />

roter Farbe, der Befehl „Mov Akku, Register“ wird in blauer Farbe dargestellt.<br />

• Des Weiteren gibt es jetzt einen Debugger, mit dem man Schleifenabläufe stoppen<br />

kann. danach kann man im Einzelschrittmodus weiterlaufen. Details siehe Kapitel 5,<br />

Seite 42.<br />

• Im Menü Ansicht ruft man das Fenster „Programm-Bemerkungen“ auf. In diesem<br />

kann man Kommentare und Bemerkungen eintragen.<br />

• Mit einem Doppelklick in einer Adresse des Speichers kann man diese Adresse nun<br />

einfacher ändern.<br />

Hinweis:<br />

In den Optionen kann man aber die Farben Individuell setzen.<br />

1.2 Löschen der Register<br />

Beim Löschen der Register werden nur die Inhalte der Register gelöscht. Die Namen bleiben<br />

erhalten.<br />

1.3 Löschen des Speichers<br />

Der Speicher wird erst nach einer Sicherheitsabfrage gelöscht.<br />

1.4 Debugger<br />

Man konnte schon in den vorherigen Versionen mit dem Befehl „0“ das Programm anhalten.<br />

Der Start war mit dem Schalter „Start von IP“ möglich. Beim Löschen des „0“-Befehls<br />

änderten sich aber die Sprungadressen. Mit Version 3 gibt nun einen Debugger. Man gibt in<br />

einem Fenster die Haltepunkte als Zeilennummern ein.


Einführung -6-<br />

Details siehe Kapitel 5, Seite 42.<br />

1.5 Temp-Dateien<br />

Das automatische Speichern wurde deaktiviert. Ab Version 3 wird nach jeder Änderung nun<br />

das Programm eine Temp-Datei gespeichert. Die Dateien haben die Namen „Temp01.cpu“ bis<br />

„Temp99.cpu“. Damit kann man besser Versionen verwalten. Gespeichert wird in einem<br />

Ordner namens „Temp“.<br />

Hinweis:<br />

• Die Dateien werden mit dem Aufrufen von „Datei Neu“ bzw. Datei Öffnen“ gelöscht.<br />

• Beim Beenden werden die Dateien nicht gelöscht.<br />

1.6 John von Neumann<br />

Die klassische von-Neumann-Architektur wurde im Jahre 1946 von John von Neumann als<br />

Konzept zur Gestaltung eines universellen <strong>Rechner</strong>s für technische, wissenschaftliche und<br />

wirtschaftliche Problemstellungen vorgeschlagen. Bis auf wenige Ausnahmen sind die<br />

heutigen Rechenanlagen Weiterentwicklungen dieses Universalrechners.<br />

Nach [1] ist ein <strong>Rechner</strong> nach in der von-Neumann-Architektur aufgebaut [1], wenn er<br />

folgende Kriterien erfüllt:<br />

• Der <strong>Rechner</strong> besteht aus fünf Komponenten,<br />

o dem Steuerwerk<br />

o dem Rechenwerk<br />

o dem Speicher<br />

o dem Eingabewerk<br />

o dem Ausgabewerk<br />

• Die Struktur des <strong>Rechner</strong>s ist unabhängig von der Art der Problemstellung. Dem<br />

<strong>Rechner</strong> muss ein Programm als Bearbeitungsvorschrift vorliegen, ansonsten ist er<br />

arbeitsunfähig<br />

• Programm und Daten sind in einem Speicher untergebracht<br />

• Der Speicher ist in gleich große, durchnummerierte Zellen (Speicherzellen) unterteilt.<br />

• Aufeinanderfolgende Programmbefehle werden in aufeinander folgenden Speicherzellen<br />

gespeichert<br />

• Durch Sprungbefehle kann die Bearbeitung dieser Reihenfolge verlassen werden<br />

• Es gibt mindestens folgende Befehlsarten:<br />

o Arithmetikbefehle, Logikbefehle, Transportbefehle<br />

o bedingte Sprünge und Befehle für Unterbrechungen<br />

o Warten-, Ein- /Ausgabe- und Schiebeoperationen<br />

• Alle diese Befehle können in verschiedenen Adressierungsarten ausgeführt werden<br />

• Alle Befehle und Daten sind binär kodiert, so dass eine Unterscheidung nicht möglich<br />

ist. Geeignete Schaltwerke im Steuerwerk decodieren die Daten und sorgen für die<br />

richtige Entschlüsselung


Einführung -7-<br />

Die <strong>Rechner</strong>architektur des von-Neumann-<strong>Rechner</strong>s bezeichnet man nach M. Flynn als SISD-<br />

Architektur 1 . Das bedeutet, dass immer nur ein Befehl auf ein Datum angewandt werden<br />

kann. Im Gegensatz dazu gibt es Architekturen, die mehrere Befehle auf ein Datum anwenden<br />

(MISD), die einen Befehl auf mehrere Daten anwenden (SIMD) und Architekturen, die<br />

mehrere Befehle gleichzeitig auf mehrere Daten anwenden können (MIMD). Die Tätigkeit<br />

eines von-Neumann-<strong>Rechner</strong>s besteht im Wesentlichen im Transportieren von Daten<br />

zwischen dem Rechenwerk und dem Speicher bzw. Ein-/Ausgabewerk. Dies geschieht alles<br />

auf nur einem Datenkanal. Aus diesem Grunde nennt man diesen Pfad auch den "von-<br />

Neumann-Flaschenhals". Hier können die oben genannten Architekturen Abhilfe schaffen.<br />

Die heutigen <strong>Rechner</strong>architekturen benutzen mehrere unabhängige Bus-Systeme, <strong>zum</strong><br />

Beispiel den PCI-Bus mit der North- und South-Bridge.<br />

Die Abbildung 1 zeigt den prinzipiellen Aufbau eines John-von-Neumann-<strong>Rechner</strong>s. Die<br />

Befehle, Daten und Adressen sind im Speicher.<br />

Abbildung 1 Prinzip-Skizze eines John-von-Neumann-<strong>Rechner</strong>s<br />

Die Daten und Programme werden durch das Betriebssystem von Festplatte in den<br />

Hauptspeicher geladen. Prinzipiell besteht der Speicher nur aus Nullen und Einsen. Welche<br />

Bytes Daten bzw. Programmbefehle sind, kann man ohne Analyse nicht entscheiden. Der<br />

zweite wichtige Aspekt ist das Steuerwerk. Dieses liest die Befehle aus dem Speicher. Dazu<br />

benutzt es den Adressbus zur Auswahl des Befehls bzw. der Daten. Im zweiten Schritt werden<br />

über dem Datenbus die Datenbits in das Steuerwerk transportiert. Dort wird der Befehle<br />

analysiert, und es werden gegebenenfalls noch weitere Operanden aus dem Speicher geholt.<br />

Danach werden die Daten in das Rechenwerk bzw. der ALU 2 transportiert und der Befehl<br />

ausgeführt. Das Ergebnis wird dann in Register oder in einem Speicher zurückkopiert. Nach<br />

Abarbeitung des Befehls wird der nächste Befehl zur Ausführung geholt.<br />

1.7 Steuerwerk<br />

Das Steuerwerk ist für die Zerlegung der Befehle, der Dekodierung der Daten und die<br />

Generierung der Steuersignale zuständig. Von hier aus werden die Speicherzellen und die<br />

Register adressiert sowie die Schreib- und Leseleitungen aktiviert.<br />

1 SISD: Single Instruction, Single Data<br />

2 ALU = Arithmetic Logical Unit


Einführung -8-<br />

Zuerst werden die Befehle in Mikrocode Befehle, auch Nanobefehle genannt, zerlegt, danach<br />

werden die einzelnen Steuerleitungen geschaltet. Hier werden die Bitkombinationen der<br />

Befehle in elektrische Impulse umgewandelt.<br />

1.8 Rechenwerk<br />

Das Rechenwerk besteht aus den beiden Operandenregistern und dem AKKU als Zielregister.<br />

Außerdem gibt es noch ein Übertrag-Flag und die ALU, in der die eigentliche Verknüpfung<br />

der Daten geschieht. Die "Programmierung" der ALU geschieht über den Operandenbus OP.<br />

Der Datenspeicher besteht aus acht Speicherzellen und dient der Speicherung von Daten, die<br />

nicht unmittelbar verarbeitet werden sollen. Wenn das geschehen soll, müssen die Daten erst<br />

in den AKKU oder in eines der acht Register transportiert werden. Die Zugriffszeiten heutiger<br />

Datenspeicher liegen zwischen 1 bis 100 ns. Die Speichergröße kann bis zu einigen GByte<br />

betragen.<br />

1.9 Ein- und Ausgabeeinheit<br />

Die Ein-/Ausgabeeinheit besteht aus zwei Daten-Kanälen, im Programm aus 8-Bit, wobei<br />

einer als Eingabekanal und einer als Ausgabekanal dient. Hier können Daten eingelesen oder<br />

ausgegeben werden. Aktuell werden die Daten in einem Dialogfenster eingegeben.<br />

1.10 Register<br />

Die Registerbank besteht aus acht Registern und dient der Aufnahme von Operanden und<br />

Zwischenergebnissen. Von hier aus können Daten direkt mit dem AKKU verknüpft werden.<br />

Die Zugriffszeiten sind aufgrund der einfacheren Adressierung und anderem hardwaremäßigen<br />

Aufbau bedeutend kürzer als bei Datenspeichern. Die heutigen Prozessoren haben<br />

zwischen 16 und 128 Register mit bis zu 128 Bit Datenbreite.<br />

1.11 Datenbus<br />

Über den Datenbus werden die Daten zwischen den einzelnen Komponenten transportiert. Er<br />

verbindet den Speicher, das Rechenwerk, die Ein-/Ausgabeeinheit und die Registerbank<br />

miteinander.<br />

1.12 Adressbus<br />

Über den Adressbus werden die einzelnen Speicherzellen und Register angesprochen. Die<br />

Adresse wird vom Steuerwerk generiert und auf den Adressbus ausgegeben. Jede Speicherzelle<br />

und jedes Register ist mit dieser Adresse eindeutig identifizierbar. Die Steuerleitungen<br />

wie z.B. IORD oder WR legen fest, ob eine Information gelesen oder geschrieben werden<br />

soll. Sie werden ebenfalls vom Steuerwerk generiert.


Aufbau des Programms -9-<br />

2 Aufbau des Programms<br />

2.1 Oberfläche<br />

Abbildung 2 Oberfläche von Resim<br />

Die Abbildung 2 zeigt das Hauptfenster von Resim. Das Programm -arbeitet mit Menüs, einer<br />

Schalterleiste und grafischen Elementen zur Anzeige der Inhalte.<br />

2.1.1 Menüstruktur<br />

2.1.1.1 Menü Datei<br />

Eintrag Beschreibung<br />

Neu Erstellen einer neuen Datei, der Speicher<br />

und das Register werden gelöscht<br />

Öffnen Öffnet eine vorhandene Datei<br />

Speichern Speichert den aktuellen Inhalt in die<br />

angegebene Datei<br />

Speichern unter Inhalt unter einem anderem Namen<br />

speichern<br />

Drucken Drucken der Befehle<br />

Druckereinrichtung Aufruf der Druckereinrichtung<br />

Export der Befehle in die Zwischenablage Exportiert die Befehle in die<br />

Zwischenablage<br />

Neue Instanz des Programms Das Programm wird neu aufgerufen. Es ist<br />

kein MDI-Programm.<br />

Beenden Beendet das Programm.


Aufbau des Programms -10-<br />

2.1.1.2 Ansicht<br />

Eintrag Beschreibung<br />

Programm-<br />

Bemerkungen<br />

Anzeige eines Fensters, indem man Bemerkungen eintragen kann.<br />

Es ist ein Top-of-the-stay Fenster, es bleibt also immer oberhalb<br />

aller Fenster.<br />

Befehlsfenster Anzeige des Befehlsdialogs. Es ist ein Top-of-the-stay Fenster, es<br />

bleibt also immer oberhalb aller Fenster.<br />

Ausgabefenster Öffnet das Ausgabefenster an der letzten bekannten Position. Dieses<br />

Fenster zeigt die Eingaben und Ausgaben der Ein- und Ausgabeeinheit.<br />

Debugger Öffnet das Debuggerfenster mit den Haltepunkten.<br />

Symbolleiste An- und Ausschalten der Symbolleiste<br />

2.1.1.3 Befehle<br />

Eintrag Beschreibung<br />

Transportbefehle Zeigt direkt das Dialogfenster für die Transportbefehle<br />

Arithemetikbefehle Zeigt direkt das Dialogfenster für die Arithmetikbefehle<br />

Logikbefehle Zeigt direkt das Dialogfenster für die Logikbefehle<br />

Schiebebefehle Zeigt direkt das Dialogfenster für die Schiebebefehle<br />

Sprungbefehle Zeigt direkt das Dialogfenster für die Sprungbefehle<br />

E/A-Befehle Zeigt direkt das Dialogfenster für die E/A-Befehle<br />

Steuerbefehle Zeigt direkt das Dialogfenster für die Steuerbefehle<br />

2.1.1.4 Reset<br />

Eintrag Beschreibung<br />

Speicher Reset Löscht den Speicher<br />

Register Reset Löscht die Register<br />

System Reset Löscht den Speicher und die Register<br />

2.1.1.5 Start<br />

Eintrag Beschreibung<br />

Programmstart (F9) Startet das Programm vom ersten Speicher, IP=0<br />

Einzelschritt Stellt den Einzelschrittmodus ein. Mit den Befehl „Takt“ kann<br />

man den nächsten Schritt bei der Befehlsabarbeitung ausführen<br />

Takt (F8) Mit den Befehl „Takt“ kann man den nächsten Schritt bei der<br />

Befehlsabarbeitung ausführen<br />

Programmlauf beenden Beendet den Ablauf, entspricht dem Schalter „Stop“


Aufbau des Programms -11-<br />

2.1.1.6 Optionen<br />

Eintrag Beschreibung<br />

Taschenrechner Ruft den Taschenrechner auf. Bitte beachten, man muss dann die<br />

wissenschaftliche Ansicht einstellen.<br />

Einstellungen Zeigt ein Dialogfenster mit den Einstellungen des Programms<br />

Speicherbelegung Anzeige des aktuellen Speichers des <strong>Rechner</strong>s<br />

Eintrag Einstellungen:<br />

Abbildung 3 Einstellungsfenster bzgl. der Zeiten<br />

In der oberen Einstellung kann man die Zeit der Animationen einstellen. Je kleiner der Wert,<br />

desto schneller läuft das Programm ab. Um Datenverluste zu vermeiden, speichert das<br />

Programm automatisch die Inhalte des Speichers und der Register. Dabei werden bis zu 99<br />

Varianten im Verzeichnis „Temp“ gespeichert.<br />

Abbildung 4 Einstellungsfenster der Profi-Optionen<br />

Nach dem Befehl „Einlesen einer Zahl“ kann man zwei Abkürzungen in der Eingabe<br />

vornehmen. In der letzten Einstellungen kann man das gewünschte Register im E/A-Dialog<br />

auswählen.


Aufbau des Programms -12-<br />

Abbildung 5 Einstellungsfenster bzgl. der Farben<br />

2.1.1.7 Hilfe<br />

Eintrag Beschreibung<br />

Info Anzeige der Programmsinfo<br />

2.1.2 Schalterleiste<br />

Datei öffnen<br />

Neue Datei<br />

Speichern der Daten in eine Datei<br />

Speicher löschen<br />

Register löschen<br />

Bestimmt die Anzeige im Ausgabefenster. Mögliche Optionen;<br />

• Binäre Darstellung<br />

• Hexadezimale Darstellung<br />

• Die Werte werden als ASCII-Zeichen dargestellt<br />

Start des Programms ab Position Null


Aufbau des Programms -13-<br />

2.2 Grafische Elemente<br />

Start des Programms ab der aktuellen Position<br />

Einschalten des Einzelschrittmodus<br />

Abarbeiten des aktuellen Befehls. Jeder befehl besteht aus mehreren Teilen<br />

Beendet den Einzelschrittmodus und den autom. Ablauf<br />

Setzt den Interrupt (Wird aber nicht weiter verwendet)<br />

Anzeige des Befehlsfensters<br />

Folgende Grafische Elemente sind im Dialogfenster vorhanden:<br />

2.2.1.1 Ein- und Ausgabeeinheit<br />

Abbildung 6 E/A-Einheit<br />

Zeigt die Ein- und Ausgabeeinheit. Mit dem rechten Editor kann eine Zahl eingestellt werden.


Aufbau des Programms -14-<br />

2.2.1.2 Speicher<br />

Abbildung 7 Speicher<br />

Zeigt den Speicher, also die Befehle des Programms. Mit der rechten Maustaste kann man<br />

Zeilen löschen bzw. einfügen. Man sollte aber beachten, dass manche Befehle zwei Zeilen<br />

benötigen!<br />

Mit einem Doppelklick im Speicher kann man die Adresse nun einfacher ändern. Man muss<br />

direkt Positioniert man den Mausklick in eine Zeile<br />

Abbildung 8 Ändern der Sprungadresse


Aufbau des Programms -15-<br />

2.2.1.3 Register<br />

Abbildung 9 Register<br />

Zeigt die Register. Mit einem Doppelklick kann man den Inhalt bzw. die Bezeichnung ändern.<br />

Abbildung 10 Dialogfenster für ein Register<br />

2.2.1.4 Steuerwerk<br />

Abbildung 11 Steuerwerk


Aufbau des Programms -16-<br />

2.2.1.5 Programmbemerkungen<br />

Ab Version 3,1 gibt es auch ein Fenster, indem man Erläuterungen <strong>zum</strong> Programm eingeben<br />

kann. Diese Texte werden in der Resim-Datei gespeichert und beim Laden wieder angezeigt.<br />

Mit dem Menüeintrag „Ansicht“, Eintrag „Programmbemerkungen“ wird der Text in einem<br />

Editor angezeigt:<br />

Abbildung 12 Programmbemerkungen<br />

2.2.1.6 Rechenwerk<br />

Zeigt das Rechenwerk. Im Akku steht immer der erste Operand. Hat man zwei Operanden, so<br />

wird die Anzeige „Operand“ benutzt. Die ALU ist hier nur als Panel angedeutet.<br />

Abbildung 13 Rechenwerk<br />

Das Ergebnis des Befehls wird wieder in den Akkumulator eingetragen. Dazu werden die<br />

beiden Flags Z und Carry gesetzt. Das Zero-Flag wird gesetzt, wenn das Ergebnis Null ist.<br />

Das Carry-Flag, Übertragungbit, wird gesetzt, wenn das Ergebnis größer als 255 ist. Es dient<br />

dazu, Ketten von Operationen korrekt abzubilden. Das Carry-Bit wird dann in der nächsten<br />

Operation benutzt.<br />

Ein Beispiel ist die Multiplikation mittels ROR, SHL und dem Carry-Flag.<br />

2.3 Befehlsliste von <strong>ReSim</strong><br />

Diese Liste beinhaltet eine Zusammenfassung aller Befehle für die <strong>Rechner</strong>simulation. Zu<br />

jedem Befehl wird eine kurze syntaktische und funktionale Beschreibung angegeben, die in<br />

ähnlicher Form auch in der Online Hilfe im Programm zu finden ist.


Aufbau des Programms -17-<br />

Reihenfolge:<br />

Die Reihenfolge der Befehle orientiert sich am 8086-Assembler. Es muss also immer von<br />

rechts nach links gelesen werden.<br />

Beispiel:<br />

MOV Akku, Reg1 Kopiert den Inhalt von Register 1 in den Akkumulator<br />

2.3.1 Transportbefehle<br />

Die Transportbefehle dienen <strong>zum</strong> Kopieren der Daten vom Akkumulator <strong>zum</strong> Register bzw.<br />

<strong>zum</strong> Speicher.<br />

Befehl Beschreibung<br />

MOV Akku, Reg? Kopiert den Wert des ausgewählten Registers in den<br />

Akkumulator.<br />

MOV Akku, Konstante Kopiert den Wert einer Konstanten in den Akkumulator. Eine<br />

Konstante kann nicht direkt in ein Register kopiert werden.<br />

MOV Reg?, Akku Kopiert den Wert des Akkumulator in ausgewählten Register.<br />

MOV Akku, Speicher Kopiert den Wert des ausgewählten Speichers in den<br />

Akkumulator.<br />

MOV Speicher, Akku Kopiert den Wert des Akkumulator in die Speicherzelle.<br />

Hinweis:<br />

Die Adressen der Register werden in den jeweiligen Befehlen in den Bits 0 bis 2 gespeichert.<br />

Beispiel: 01001001 Add Akku, Register<br />

Die Bitfolge „01001“ bestimmt den Befehl<br />

Die Bitfolge „001“ bestimmt das Register<br />

2.3.2 Arithmetikbefehle<br />

Die Arithmetikbefehle dienen der Addition, Subtraktion und Division resp. Modulo-Berechnung.<br />

Das Ergebnis wird wieder in den Akkumulator geschrieben.<br />

Befehl Beschreibung<br />

ADD Akku, Reg? Berechnet die Summe des Akkumulators mit dem ausgewählten<br />

Register.<br />

ADD Akku, Konstante Berechnet die Summe des Akkumulators mit der Konstanten.<br />

SUB Akku, Reg? Berechnet die Summe des Akkumulators mit dem ausgewählten<br />

Register.<br />

SUB Akku, Konstante Berechnet die Differenz des Akkumulators mit der Konstanten.<br />

MOD Akku, Reg? Berechnet die Differenz des Akkumulators mit dem ausgewählten<br />

Register.<br />

MOD Akku, Konstante Berechnet den Modulo-Wert, Restwert, des Akkumulators mit


Aufbau des Programms -18-<br />

der Konstanten. 7 mod 3 ist 1<br />

DIV Akku, Reg? Berechnet die Division des Akkumulators mit dem ausgewählten<br />

Register.<br />

DIV Akku, Konstante Berechnet die Division des Akkumulators mit der Konstanten.<br />

2.3.3 Logikbefehle<br />

Die Logikbefehle werden <strong>zum</strong> Setzen, Maskieren und Löschen von Bits benutzt. Das Ergebnis<br />

wird wieder in den Akkumulator geschrieben.<br />

Befehl Beschreibung<br />

AND Akku, Reg? Berechnet das logische UND des Akkumulators mit dem<br />

ausgewählten Register<br />

AND Akku, Konstante Berechnet das logische UND des Akkumulators mit der<br />

Konstanten<br />

OR Akku, Reg? Berechnet das logische ODER des Akkumulators mit dem<br />

ausgewählten Register<br />

OR Akku, Konstante Berechnet das logische ODER des Akkumulators mit der<br />

Konstanten<br />

NOT Akku Bildet das EINER-Komplement des Akkumulators, also die<br />

einfache Negation (bitweise)<br />

Der XOR-Befehl kann mittels folgender Abfolge simuliert werden:<br />

a XOR b = ( !a AND b ) OR (a AND !b)<br />

2.3.4 Schiebebefehle<br />

Die Schiebebefehle dienen <strong>zum</strong> einfachen Multiplizieren bzw. Dividieren. Das Ergebnis wird<br />

wieder in den Akkumulator geschrieben.<br />

Befehl Beschreibung<br />

SHL Akku, Konstante Führt eine Verschiebung des Akkumulators um eine Stelle<br />

nach links aus. Das höchstwertigste Bit (MSB) wird dabei nach<br />

links herausgeschoben und das niederwertigste Bit (LSB) wird<br />

mit einer Null aufgefüllt. Dies entspricht einer Multiplikation<br />

mit dem Faktor zwei, falls keine Eins im MSB stand.<br />

SHR Akku, Konstante Führt eine Verschiebung des Akkumulators um eine Stelle<br />

nach rechts aus. Das niederwertigste Bit (LSB) wird dabei nach<br />

rechts herausgeschoben und das höchstwertigste Bit (MSB)<br />

wird mit einer Null aufgefüllt. Dies entspricht einer Division<br />

durch zwei.<br />

ROL Akku, Konstante Führt eine Verschiebung des Akkumulators um eine Stelle<br />

nach links aus. Das höchstwertigste Bit (MSB) wird dabei nach<br />

links herausgeschoben und in das Carry-Flag geschrieben. Das<br />

niederwertigste Bit (LSB) wird mit dem Inhalt des Carry-Flag,


Aufbau des Programms -19-<br />

alter Wert, aufgefüllt.<br />

ROR Akku, Konstante Führt eine Verschiebung des Akkumulators um eine Stelle<br />

nach rechts aus. Das niederwertigste Bit (LSB) wird dabei nach<br />

rechts herausgeschoben und in das Carry-Flag geschrieben. Das<br />

höchstwertigste Bit (MSB) wird mit dem Inhalt des Carry-Flag,<br />

alter Wert, aufgefüllt.<br />

Beispiele:<br />

• 00011001 SHL ergibt 00110010<br />

• 00011001 SHR ergibt 00001100<br />

• 00011001 ROL ergibt 00110010 wenn Carry nicht gesetzt<br />

• 00011001 ROL ergibt 00110011 wenn Carry gesetzt<br />

• 00011001 ROR ergibt 00001100 wenn Carry nicht gesetzt<br />

• 00011001 ROR ergibt 10001100 wenn Carry gesetzt<br />

2.3.5 Sprungbefehle<br />

Die Sprungbefehle dienen <strong>zum</strong> Ändern der linearen Programmabfolge. Es wurden nicht alle<br />

möglichen Varianten implementiert. Insbesondere fehlt der Sprungbefehl mit einem<br />

Konstantenvergleich. Man kann aber stattdessen die Konstante in ein Register speichern.<br />

Befehl Beschreibung<br />

Jump Adresse Unbedingter Sprung. Es wird immer zur angegebenen Adresse<br />

gesprungen.<br />

Jump Akku Zero zu Wenn der Inhalt des Akkumulators Null ist, wird zur<br />

Adresse<br />

angegebenen Adresse gesprungen.<br />

Jump Akku GT Zero zu Wenn der Inhalt des Akkumulators größer Null ist, wird zur<br />

Adresse<br />

Jump Akku LT Reg(i) zu<br />

Adresse<br />

Jump Akku LE Reg(i) zu<br />

Adresse<br />

angegebenen Adresse gesprungen.<br />

Wenn der Inhalt des Akkumulators kleiner als der Inhalt des<br />

Registers i ist, wird zur angegebenen Adresse gesprungen.<br />

WICHTIG:<br />

Dieser Befehl ändert den Inhalt des Akkumulators<br />

Wenn der Inhalt des Akkumulators kleiner gleich dem Inhalt<br />

des Registers i ist, wird zur angegebenen Adresse gesprungen.<br />

WICHTIG:<br />

Dieser Befehl ändert den Inhalt des Akkumulators<br />

Jump Carry zu Adresse Wenn das Carry-Flag gesetzt ist, wird zur angegebenen Adresse<br />

gesprungen.<br />

2.3.6 E/A-Befehle<br />

Die Ein- und Ausgabebefehle dienen zur besseren Ein- und Ausgabe. Aus der E/A-Einheit<br />

kann nur der Transport <strong>zum</strong> Akkumulator programmiert werden.<br />

Eingelesen wird mittels eines Eingabefensters:


Aufbau des Programms -20-<br />

Abbildung 14 Eingabe einer Zahl in die Eingabeeinheit<br />

Die numerische Eingabe kann direkt in die Zeile eingetragen werden. Diese Zahl darf aber nur<br />

einen Bereich von null bis 255 haben. Für weitere Eingaben steht auch das zweite Register<br />

zur Verfügung.<br />

Abbildung 15 Eingabe mit Radiobutton<br />

Hier kann man die einzelnen Bits direkt angeben. Das Eingabefenster fügt dann die korrekte<br />

Zahl in die Eingabeeinheit.<br />

Befehl Beschreibung<br />

IN Akku Kopiert den Wert in der E/A-Einheit in den Akkumulator<br />

OUT Akku Kopiert den Wert des Akkumulators in die E/A-Einheit<br />

OUT Newline Ausgabe einer Leerzeile im Ausgabefenster<br />

Lies Zahl in E/A-Einheit Liest eine Zahl ein und trägt diese in die E/A-Einheit ein.<br />

Optional kann man hier auch das Register eingeben. dazu muss<br />

man im Optionsfenster die Einstellung setzen.<br />

2.3.7 Steuerbefehle<br />

Die unten aufgeführten Befehle werden bei Sprungbefehlen bzw. bei Schiebebefehlen<br />

benutzt.


Aufbau des Programms -21-<br />

Befehl Beschreibung<br />

CLR Carry Löscht das Carry-Flag. Siehe auch den ROL bzw. ROR-Befehl<br />

GoSub Sprung zu einem Unterprogramm. Der Rücksprung erfolgt mit<br />

einem IRet<br />

IRET Rücksprung eines Unterprogramms.<br />

NOP Keine Aktion (No Operation)<br />

2.4 Befehlseingabe<br />

Hier werden die einzelnen Fenster der Befehlsgruppen aufgelistet:<br />

2.4.1 Transportbefehle<br />

Abbildung 16 Bild der Transportbefehle<br />

2.4.2 Arithmetikbefehle<br />

Abbildung 17 Bild der Arithmetikbefehle


Aufbau des Programms -22-<br />

2.4.3 Logikbefehle<br />

Abbildung 18 Bild der Logikbefehle<br />

2.4.4 Schiebebefehle<br />

Abbildung 19 Bild der Schiebebefehle<br />

2.4.5 Sprungbefehle<br />

Abbildung 20 Bild der Sprungbefehle


Aufbau des Programms -23-<br />

2.4.6 E/A-Befehle<br />

Abbildung 21 Bild der E/A-Befehle<br />

Wenn die Option „Nach "Lies Zahl" automatisch "Mov Reg, Akku"“ gesetzt ist, kann man<br />

hier bequem das Zielregister eingeben. Dann werden drei Befehle eingefügt:<br />

• Lies Zahl<br />

• In Akku<br />

• Mov Reg(i), Akku<br />

2.4.7 Steuerbefehle<br />

Abbildung 22 Bild der Steuerbefehle


Befehlsgruppen -24-<br />

3 Befehlsgruppen<br />

Dieses Kapitel zeigt, wie man die einzelnen Befehle in sinnvolle Gruppen resp. Aufgaben,<br />

einteilen kann. Es gibt immer wieder „Teilaufgaben“, die in den Programmen gelöst werden<br />

müssen.<br />

3.1 Einlesen einer Zahl<br />

• Lies Zahl in E/A-Einheit<br />

• IN Akku<br />

• Move Reg(i), Akku<br />

Das Register muss ausgewählt werden<br />

3.2 Register mit einem Wert belegen<br />

Diese Aufgabe kann man nur über den Akkumulator realisieren:<br />

• Mov Akku, Kostante<br />

• Move Reg(i), Akku<br />

Das Register muss ausgewählt werden<br />

3.3 Operation auf einem Register und die Speicherung<br />

Diese Aufgabe kann man nur über den Akkumulator realisieren:<br />

• Mov Akku, Reg(i) // Register in den Akkumulator<br />

• Operation Akku, Reg(j) // add, sub, div, mod<br />

• Mov Akku, Reg(k) // Wert in das Zielregister schreiben<br />

Die Register i,j,k müssen ausgewählt werden. Können aber auch teilweise identisch sein


Aufbau des Programms -25-<br />

3.4 Sprung, wenn Akku größer Null<br />

Befehle:<br />

• Mov Akku, Reg(i)<br />

• Jump Akku GT Zero zu Adresse<br />

Abbildung 23 Sprung, wenn Akku > 0


Beispiele -26-<br />

4 Beispiele<br />

4.1 Einfache Beispiele<br />

4.1.1 Kopieren einer Konstante in den Akkumulator (Bsp1)<br />

a) Neue Datei anklicken und speichern unter Bsp1<br />

b) Öffnen des Befehlsdialog<br />

Anklicken des Schalters „Transportbefehle“<br />

c) Auswahl des Eintrags „Move Akku, Konstante“<br />

Eintragen der Konstante 122<br />

Schalter „Ok“ betätigen<br />

Abbildung 24 Konstante 122 in den Akku<br />

Folgender Befehl ist nun im Speicher:<br />

Adr Binärwert Befehl / Daten<br />

000 00111111 Move Akku, Konstante<br />

001 01111010 122<br />

d) Starten des Programms mit der Taste F9 oder mit dem Schalter<br />

e) Der Akkumulator enthält den Wert 12210 bzw. 011110102<br />

4.1.2 Kopieren und addieren von Konstanten (Bsp2)<br />

a) Neue Datei anklicken und speichern unter Bsp2<br />

b) Öffnen des Befehlsdialog


Beispiele -27-<br />

Anklicken des Schalters „Transportbefehle“<br />

c) Auswahl des Eintrags „Move Akku, Konstante“<br />

Eintragen der Konstante 122<br />

Schalter „Ok“ betätigen<br />

Abbildung 25 Konstante 122 in den Akku<br />

d) Wechseln <strong>zum</strong> Befehlsdialog<br />

Anklicken des Schalters „Arithmetikbefehle“<br />

e) Auswahl des Eintrags „Add Akku, Konstante“<br />

Eintragen der Konstante 35<br />

Schalter „Ok“ betätigen<br />

Abbildung 26 Adieren einer Konstante <strong>zum</strong> Akkumulator<br />

f) Wechseln <strong>zum</strong> Befehlsdialog<br />

Anklicken des Schalters „Transportbefehle“<br />

g) Auswahl des Eintrags „Move Register, Akku“<br />

Eintragen des Registers 0<br />

Schalter „Ok“ betätigen


Beispiele -28-<br />

Abbildung 27 Wert des Akkumulators ins Register Null kopieren<br />

Folgende Befehle sind nun im Speicher:<br />

Adr Binärwert Befehl / Daten<br />

000 00111111 Move Akku, Konstante<br />

001 01111010 122<br />

002 01011000 Add Akku, Konstante<br />

003 00100011 35<br />

004 00110000 Move Reg, Akku<br />

g) Setzen eines Registers<br />

Doppelklick auf das Register Null<br />

In der unteren Zeile Summe eintragen<br />

Schalter „Ok“ betätigen<br />

Abbildung 28 Bezeichnung in ein Register eintragen<br />

h) Starten des Programms mit der Taste F9 oder mit dem Schalter<br />

i) Der Akkumulator bzw. das Register Null enthalten den Wert 15710 bzw. 100111012


Beispiele -29-<br />

Abbildung 29 Ergebnis des zweiten Beispiels<br />

4.1.3 Einlesen einer Zahl, kopieren ins Register Null (Bsp3)<br />

a) Neue Datei anklicken und speichern unter Bsp3<br />

b) Öffnen des Befehlsdialog<br />

Anklicken des Schalters „E/A-Befehle“<br />

c) Auswahl des Eintrags „Lies Zahl in E/A-Einheit“<br />

Schalter „Ok“ betätigen<br />

Abbildung 30 Auswahl des Befehls „Lies Zahl in E/A-Einheit"<br />

d) Wechseln <strong>zum</strong> Befehlsdialog<br />

Anklicken des Schalters „Transportsbefehle“<br />

e) Auswahl des Eintrags „Move Register, Akku“<br />

Eintragen des Registers 0<br />

Schalter „Ok“ betätigen


Beispiele -30-<br />

Abbildung 31 Wert des Akkumulators ins Register Null kopieren<br />

Folgende Befehle sind nun im Speicher:<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit<br />

001 11000000 IN Akku<br />

002 00110000 Move Reg, Akku<br />

003 00110000 Move Reg, Akku<br />

g) Setzen eines Registers<br />

Doppelklick auf das Register Null<br />

In der unteren Zeile „Eingegeneber Wert“ eintragen<br />

Schalter „Ok“ betätigen<br />

Abbildung 32 Bezeichnung in ein Register eintragen<br />

f) Starten des Programms mit der Taste F9 oder mit dem Schalter<br />

g) Der Akkumulator bzw. das Register Null enthalten den eingegebenen Wert


Beispiele -31-<br />

4.1.4 Berechnen einer Formel (Bsp4)<br />

Dieses Beispiel zeigt die Berechnung einer Multiplikation und einer Addition. Folgende<br />

Formel soll berechnet werden:<br />

c = a + 4·b<br />

a) Im ersten Schritt werden nun die Register verteilt<br />

a Register 0<br />

b Register 1<br />

c Register 2<br />

b) Nun wird der Algorithmus entwickelt.<br />

In einer Hochsprache kann man die obige Gleichung direkt eingeben. In Assembler bzw.<br />

<strong>ReSim</strong> ist das nicht möglich. Da <strong>ReSim</strong> keine Punkt- vor Strichrechnung berücksichtigt,<br />

muss man erst den Ausdruck „4 mal b“ berechnen und dann a dazu addieren.<br />

c) Neue Datei anklicken und speichern unter Bsp4<br />

Einlesen von a:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 0<br />

Einlesen von b:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 1<br />

Berechnen:<br />

• „Move Akku, Register“, Registernummer 1 b !<br />

• SHL 2 // Damit wird die Zahl b um zwei Bits nach links verschoben,<br />

also 2 2 = 4<br />

• Add Akku, Register“, Registernummer 0 a !<br />

Ergebnis speichern:<br />

• „Move Register, Akku“, Registernummer 2 b !<br />

• OUT Akku // Damit wird das Ergebnis ausgegeben


Beispiele -32-<br />

Abbildung 33 Programm bsp4<br />

Im Programm bsp4 wurden die Register null bis zwei mit Bezeichnungen versehen. Da diese<br />

mit in der Datei gespeichert werden, existiert nun eine einfache Dokumentation des<br />

Algorithmus.<br />

Hinweis:<br />

Die Adressen der Register werden in den jeweiligen Befehlen in den Bits 0 bis 2 gespeichert.<br />

Weitere Aufgabe:<br />

Erstellen eines <strong>ReSim</strong>-Programms mit Einlesen und Speichern von sechs Zahlen und Berechnen<br />

folgender Formel<br />

a + b a − b<br />

g = −<br />

c + d e + f<br />

4.1.5 Bestimmen des Maximum dreier Zahlen<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit<br />

001 11000000 IN Akku<br />

002 00110000 Move Reg, Akku 1. Zahl in Register 0<br />

003 10111100 Lies Zahl in E/A-Einheit<br />

004 11000000 IN Akku<br />

005 00110001 Move Reg, Akku 2. Zahl in Register 1<br />

006 10111100 Lies Zahl in E/A-Einheit<br />

007 11000000 IN Akku<br />

008 00110010 Move Reg, Akku 3. Zahl in Register 2


Beispiele -33-<br />

009 00101000 Move Akku, Register 1. Zahl holen<br />

010 11110001 Jump Akku LT Reg(i) zu Adresse Abfrage mit Reg(1)<br />

011 00010000 16 wenn Reg(0) < Reg(1) dann jump 16<br />

012 00101000 Move Akku, Register Reg(0) ist >= Reg(1)<br />

013 00110011 Move Reg, Akku Maximum speichern in Reg(3)<br />

014 10111000 Jump zu Adresse Sprung zu 18<br />

015 00010010 18<br />

016 00101001 Move Akku, Register Maximum speichern in Reg(3)<br />

017 00110011 Move Reg, Akku Nun “jump” zu 18<br />

018 00101010 Move Akku, Register Abfrage mit Maximum und Reg(2)<br />

019 11110011 Jump Akku LT Reg(i) zu Adresse wenn Reg(2) < Reg(3) dann jump 25<br />

020 00011001 25<br />

021 00101010 Move Akku, Register Reg(2) ist >= Reg(3)<br />

022 11001000 OUT Akku Ausgabe<br />

023 10111000 Jump zu Adresse Jump zu 27<br />

024 00011011 27<br />

025 00101011 Move Akku, Register Ausgabe<br />

026 11001000 OUT Akku<br />

Optional kann man den Wert noch im zweiten Teil ins Register 3 speichern<br />

4.1.6 Bestimmen des Maximum beliebiger Zahlen<br />

Registerbelegung:<br />

Reg 0: Maximum<br />

Reg 1: Aktuelle Zahl<br />

Adr Binärwert Befehl / Daten<br />

000 00111111 Move Akku, Konstante<br />

001 00000000 0<br />

002 00110000 Move Reg, Akku<br />

003 10111100 Lies Zahl in E/A-Einheit<br />

004 11000000 IN Akku<br />

005 00110001 Move Reg, Akku<br />

006 10111001 Jump Akku Zero zu Adresse<br />

007 00001110 14<br />

008 11011000 Jump Akku LE Reg(i) zu Adresse<br />

009 00001011 11<br />

010 00101001 Move Akku, Register<br />

011 00110000 Move Reg, Akku<br />

012 10111000 Jump zu Adresse<br />

013 00000011 3<br />

014 00101000 Move Akku, Register<br />

015 11001000 OUT Akku


Beispiele -34-<br />

4.1.7 Setzen von Bits (Bsp5)<br />

Dieses Beispiel zeigt die Bit-Manipulationsmöglichkeiten. Folgende Aufgabe besteht:<br />

• Einlesen einer Zahl in Register 0<br />

• Setzen des vierten Bits 3<br />

• Speichern in Register 1<br />

a) Erst wird der Algorithmus entwickelt.<br />

Um das vierte Bit zu setzen, muss man die Oder-Verknüpfung aufrufen. Der Wert ermittelt<br />

sich aus der Nummer, indem man die Zweier-Potenz ausrechnet. Zwei hoch vier ist 16.<br />

b) Neue Datei anklicken und speichern unter Bsp4<br />

Einlesen von X:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 0<br />

Berechnen:<br />

• „Move Akku, Register“, Registernummer 0<br />

• „ODER Akku mit Konstante 16“<br />

Ergebnis speichern:<br />

• „Move Register, Akku“, Registernummer 1<br />

• „OUT Akku“ // Damit wird das Ergebnis ausgegeben<br />

Programm:<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit<br />

001 11000000 IN Akku<br />

002 00101000 Move Akku, Register<br />

003 01111111 OR Akku, Konstante<br />

004 00010000 16<br />

005 00110001 Move Reg, Akku<br />

006 11001000 OUT Akku<br />

4.1.8 Abfragen von Bits (Bsp6)<br />

Dieses Beispiel zeigt die Bit-Manipulationsmöglichkeiten. Folgende Aufgabe besteht:<br />

• Einlesen einer Zahl in Register 0<br />

• Testen, ob das dritte Bit gesetzt ist<br />

3 Informatiker zählen von Null, das 4. Bit ist „normal“ das fünfte Bit


Beispiele -35-<br />

• Falls ja, wird eine eins ins Register 1 gespeichert<br />

• Falls nein, wird eine 1 ins Register 0 gespeichert<br />

• Ausgabe des Register 1<br />

a) Erst wird der Algorithmus entwickelt.<br />

Um das dritte Bit zu selektieren, muss man die Und-Verknüpfung aufrufen. Alle Bits, die<br />

nicht interessant sind, erhalten eine Null, alle interessanten eine Eins. Für die obige<br />

Aufgabe ermittelt man den Wert Acht.<br />

b) Neue Datei anklicken und speichern unter Bsp5<br />

Einlesen von X:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 0<br />

Berechnen:<br />

• „Move Akku, Register“, Registernummer 0<br />

• „UND Akku mit Konstante 8“<br />

Sprung:<br />

Nun muss der Akkumulatorwert abgefragt werden. Ist er größer als Null, so ist das Bit<br />

gesetzt, und man muss eine Eins ins Register 1 eintragen. Sonst eine Null. Da es keine<br />

Einrückungen à la Java oder C gibt, muss man zweimal „springen“<br />

Algorithmus:<br />

UND Akku, 8<br />

Jump to Adresse L1, wenn Akku größer als Null ist<br />

mov Akku, Konstante Null<br />

Jump zur Adresse L2, ein unbedingter Sprung<br />

L1: mov Akku, Konstante Eins<br />

L2: mov Register 1, Akku // kann für beide Fälle programmiert werden<br />

out Akku<br />

Hinweise:<br />

• Die L1 und L2 sind Sprungmarken (Label). In <strong>ReSim</strong> müssen sie mit Nummern<br />

versehen werden<br />

• Im Programm kann man die genaue Adresse nicht immer genau voraus ermitteln.<br />

Dann gibt man einfach eine ungefähre Zahl ein, z. B. plus fünf. Das bedingt<br />

natürlich, dass man diesen Befehl noch einmal eingeben muss. Man kann nicht nur<br />

die Adresse ändern (jeweils noch nicht)<br />

Programm:<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit


Beispiele -36-<br />

001 11000000 IN Akku<br />

002 00110000 Move Reg, Akku<br />

003 00101000 Move Akku, Register<br />

004 01111000 AND Akku, Konstante<br />

005 00001000 8<br />

006 10111011 Jump Akku GT Zero zu Adresse<br />

007 00001100 12<br />

008 00111111 Move Akku, Konstante<br />

009 00000000 0<br />

010 10111000 Jump zu Adresse<br />

011 00001110 14<br />

012 00111111 Move Akku, Konstante<br />

013 00000001 1<br />

014 00110001 Move Reg, Akku<br />

015 11001000 OUT Akku<br />

123 liefert eine eins<br />

37 liefert eine null<br />

Weitere Aufgaben:<br />

• Eingabe einer Zahl, Löschen von Bit fünf<br />

• Eingabe einer Zahl, setzen von Bit drei und fünf<br />

• Eingabe einer Zahl, testen der Bits zwei und sechs<br />

2) Max-Bestimmung<br />

Einlesen zweier Zahlen<br />

Ausgabe der größeren Zahl (out)<br />

4.1.9 Maximal Bestimmung (Bsp7)<br />

Dieses Beispiel zeigt Abfrage-Techniken. Folgende Aufgabe besteht:<br />

• Einlesen einer Zahl in Register 0<br />

• Einlesen einer Zahl in Register 1<br />

• Ausgabe der größeren Zahl<br />

a) Neue Datei anklicken und speichern unter Bsp5<br />

Einlesen von X:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 0<br />

Einlesen von Y:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“


Beispiele -37-<br />

• „Move Register, Akku“, Registernummer 1<br />

Berechnen:<br />

• „Move Akku, Register“, Registernummer 0„<br />

Sprung:<br />

Nun muss der Akkumulatorwert mit dem Register 1 überprüft werden. Ist der Akku größer<br />

als Register 1, so wird der Akku ausgegeben, sonst Register 1. Da es keine Einrückungen à<br />

la Java oder C gibt, muss man zweimal „springen“<br />

Algorithmus:<br />

Mov Akku, Register 0<br />

Jump to Adresse L1, wenn Akku größer als Register 1 ist // Akku, Reg0 ist Max<br />

mov Akku, Register 2<br />

mov Register 2, Akku // Register 2 beinhaltet das Maximum<br />

Jump zur Adresse L2, ein unbedingter Sprung<br />

L1: mov Akku, Register 0<br />

mov Register 2, Akku // Register 2 beinhaltet das Maximum<br />

L2: mov Akku, Register 2 // kann eventuell entfallen<br />

out Akku<br />

Programm:<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit<br />

001 11000000 IN Akku<br />

002 00110000 Move Reg, Akku<br />

003 10111100 Lies Zahl in E/A-Einheit<br />

004 11000000 IN Akku<br />

005 00110001 Move Reg, Akku<br />

006 00101000 Move Akku, Register<br />

007 11110001 Jump Akku LT Reg(i) zu Adresse<br />

008 00001101 13<br />

009 00101000 Move Akku, Register<br />

010 00110010 Move Reg, Akku<br />

011 10111000 Jump zu Adresse<br />

012 00001111 15<br />

013 00101001 Move Akku, Register<br />

014 00110010 Move Reg, Akku<br />

015 00101010 Move Akku, Register<br />

016 11001000 OUT Akku<br />

Weitere Aufgaben:<br />

Summen-Bestimmung<br />

Einlesen zweier Zahlen<br />

Ausgabe der Summen beider Zahlen (out)


Beispiele -38-<br />

Mittelwert-Bestimmung<br />

Einlesen zweier Zahlen<br />

Ausgabe des Mittelwertes, ganzzahlige Division (out)<br />

4.2 Komplexere Beispiele<br />

4.2.1 Berechnen einer Summe (Bsp8)<br />

Dieses Beispiel zeigt die Schleifen-Technik. Folgende Aufgabe besteht:<br />

• Einlesen einer Zahl n in Register 0 // n<br />

• Aufsummieren der Zahlen von 1 bis n<br />

• Ausgabe der Summe<br />

a) Algorithmus erstellen<br />

Bei dieser Aufgabe muss man als erstes die Register zuordnen. Danach bedingt die<br />

verwendete Schleife die Initialisierung der Zählvariablen.<br />

Grobe Skizze des Algorithmus:<br />

• Einlesen einer Zahl<br />

• Kopieren ins Register 0<br />

• Addieren um eins<br />

• Kopieren ins Register 1 // Abfrageregister jump Akku < Reg(1)<br />

• Löschen des Registers 2 // Summenregister<br />

• Setzen des Register 3 auf eins // Zähler<br />

// Schleife L1:<br />

• kopiere Register 3 in den Akku // summe = summe + Zähler<br />

• Addiere Register 2 <strong>zum</strong> Akku<br />

• Speichere Akku in Register 2<br />

• Kopiere Zähler in den Akku<br />

• Addiere um Eins<br />

• Kopiere Akku in den Zähler<br />

• Abfrage und Sprung: Wenn Zähler<br />

b) Neue Datei anklicken und speichern unter Bsp5<br />

Einlesen von N:<br />

• „Lies Zahl in E/A-Einheit“<br />

• „In Akku“<br />

• „Move Register, Akku“, Registernummer 0<br />

• „Addiere Akku“ um eins<br />

• „Move Register, Akku“, Registernummer 1


Beispiele -39-<br />

Initialisierung der Summe und des Zählers:<br />

• „Mov Akku, Konstante“, Null<br />

• „Move Register, Akku“, Registernummer 2<br />

• „Mov Akku, Konstante“, Eins<br />

• „Move Register, Akku“, Registernummer 3<br />

Schleife: (Adresse 12)<br />

• L1: „Move Akku, Register“, Registernummer 2“ // Zähler<br />

• „OUT Akku“ // Kontrolle<br />

• „Add Akku, Register“, Registernummer 3“ // summe<br />

• „Move Register, Akku“, Registernummer 2 // summe=summe+Zähler<br />

• „Move Akku, Register“, Registernummer 3“<br />

• „Add Akku, Konstante“, Eins<br />

• „Move Register, Akku“, Registernummer 3 // Zähler = Zähler+1<br />

Sprung:<br />

Nun muss der Akkumulatorwert mit dem Register 1 (n+1) überprüft werden.<br />

• „Jump zur Adresse, wenn Akku < Register“, Registernummer 2“ // summe<br />

o Jump Akku LT Reg(i)<br />

o Adresse 12<br />

o Register 1<br />

Programm:<br />

Adr Binärwert Befehl / Daten<br />

000 10111100 Lies Zahl in E/A-Einheit<br />

001 11000000 IN Akku<br />

002 00110000 Move Reg, Akku<br />

003 01011000 Add Akku, Konstante<br />

004 00000001 1<br />

005 00110001 Move Reg, Akku<br />

006 00111111 Move Akku, Konstante<br />

007 00000000 0<br />

008 00110010 Move Reg, Akku<br />

009 00111111 Move Akku, Konstante<br />

010 00000001 1<br />

011 00110011 Move Reg, Akku<br />

012 00101011 Move Akku, Register<br />

013 11001000 OUT Akku<br />

014 01001010 Add Akku, Register<br />

015 00110010 Move Reg, Akku<br />

016 00101011 Move Akku, Register<br />

017 01011000 Add Akku, Konstante<br />

018 00000001 1<br />

019 00110011 Move Reg, Akku<br />

020 11110001 Jump Akku LT Reg(i) zu Adresse<br />

021 00001100 12<br />

022 00101010 Move Akku, Register


Beispiele -40-<br />

023 11001000 OUT Akku<br />

Weitere Aufgaben:<br />

Mittelwert-Bestimmung<br />

Einlesen einer Zahl n<br />

Berechnen der Summe von 1 bis n<br />

Ermitteln des Mittelwertes<br />

Ausgabe des Mittelwertes<br />

Teiler einer Zahl<br />

Einlesen einer Zahl x<br />

Berechnen und Ausgabe aller echten Teiler der Zahl x<br />

Test auf vollkommene Zahl<br />

Einlesen einer Zahl x<br />

Berechnen der Summe aller echten Teiler der Zahl x<br />

Ist die Summe gleich der Zahl x<br />

dann Ausgabe einer 1<br />

sonst Ausgabe einer 0<br />

Lösung: 33 Zeilen<br />

4.3 Schwere Beispiele<br />

Fibonacci-Folge:<br />

Einlesen einer Zahl N<br />

Ermitteln der Fibonacci-Folge bis die n-te Zahl ausgegeben wurde<br />

Lösung: 27 Zeilen<br />

Maximal kann n den Wert 13 haben<br />

Mögliche Registerbelegeung:<br />

Register 0: N // wie viele Folgenglieder werden ausgegeben<br />

Register 1: a<br />

Register 2: b<br />

Register 3: ??<br />

Register 4: Zähler<br />

Die Fibonacci-Folge fängt bei 0 und 1 an.<br />

Die nächste Zahl ergibt sich aus der Summe der vorherigen beiden Zahlen<br />

Primzahl-Test:<br />

Einlesen einer Zahl x<br />

Wenn x eine Primzahl ist<br />

dann Ausgabe von 1<br />

sonst Ausgabe von 0


Beispiele -41-<br />

Primzahl-Ausgabe:<br />

Einlesen einer Zahl x<br />

Bestimmen und Ausgabe aller Primzahlen von zwei bis zur Zahl x<br />

Fakultät:<br />

Einlesen einer Zahl x<br />

Ausgabe der Fakultät<br />

Maximal darf aber fünf eingeben werden<br />

33 Zeilen mit der einfachen Lösung<br />

Teiler einer Zahl:<br />

Einlesen einer Zahl x<br />

Berechnen und Ausgabe aller echten Teiler der Zahl x<br />

Hier muss die Multiplikation die Modulo-Funktion ersetzen, da die Modulo-Funktion nur mit<br />

einer Konstanten implementiert wurde.


Debugger -42-<br />

5 Debugger<br />

Ab Version 3,00 ist ein Debugger integriert. Damit kann man Haltepunkte setzen und bis zu<br />

diesen das Programm automatisch ablaufen lassen. Die Haltepunkte werden in einem<br />

separaten Fenster verwaltet.<br />

5.1 Eigenschaften<br />

• Anzeige der Breakpoints in einem Fenster<br />

• Anschalten aller Breakpoints<br />

• Setzen von Breakpoints im laufenden Programm !<br />

• Trace-Modus mit Einzelschritt<br />

• Automatischer Weiterlaufen mit dem Schalter „Start mit IP“<br />

5.2 Vorgehensweise<br />

• Schreiben des Programms<br />

• Öffnen des Debuggerfenster mit dem Menü „Ansicht“, Eintrag „Debugger“<br />

• Eintragen der Haltepunkt. Eingefügt werden die Nummer<br />

• Starten mit der Taste „F9“ oder dem Schalter „Starte von IP 0“<br />

Abbildung 34 Debugger Ansicht<br />

In der Abbildung wurde ein Haltepunkt mit der Zeilenummer 25 eingegeben. Im<br />

Speicherfenster sieht man, dass das Programm genau beim Befehlszeiger 25 anhält. Der<br />

Befehl wurde aber noch nicht ausgeführt.<br />

Das Programm prüft nach jedem Befehl, ob ein gültiger Haltepunkt im Editor eingetragen ist.<br />

Wurde ein Haltepunkt gefunden, stoppt das Programm. Nun kann man sich die Inhalte der<br />

Register ansehen. Mit dem Schalter „Einzelschritt“ kann man nun das Programm nacheinander<br />

abarbeiten. Der Schalter „Start von IP“ startet nun bei Bedarf das Programm in den<br />

automatischen Modus. Gestoppt wird, wenn ein Haltepunkt erkannt wird.


Beispiele -43-<br />

Abbildung 35 Debugfenster<br />

Wenn die aktuelle IP-Adresse im Fenster in einer beliebigen Zeile steht, muss nicht sortiert<br />

sein, so hält das Programm an, und man muss im Einzelschrittverfahren weitermachen.<br />

Danach kann man mit dem Schalter weiterlaufen.


Grundlagen -44-<br />

6 Grundlagen<br />

6.1 Logische Verknüpfungen<br />

Oder Verknüpfung:<br />

ODER 0 1<br />

0 0 1<br />

1 1 1<br />

Und Verknüpfung:<br />

UND 0 1<br />

0 0 0<br />

1 0 1<br />

Negation:<br />

0 1<br />

NOT 1 0<br />

Exklusives Oder:<br />

XOR 0 1<br />

0 0 1<br />

1 1 0<br />

XOR ergibt eine 1, wenn die Bits unterschiedlich sind!<br />

6.1.1 Beispiele<br />

Diese logischen Verknüpfungen werden auch auf Bitfolgen angewandt.<br />

0001 ODER 1000 = 1001<br />

0001 OR 1000 = 1001<br />

0001 ∨ 1000 = 1001<br />

0001 | 1000 = 1001<br />

1011 UND 1000 = 1000<br />

1011 AND 1000 = 1000<br />

1011 ∧ 1000 = 1000<br />

1011 & 1000 = 1000<br />

NOT 1010 = 0101


Beispiele -45-<br />

NICHT 1010 = 0101<br />

¬ 1010 = 0101<br />

! 1010 = 0101<br />

1011 XOR 1000 = 0011<br />

1010 XOR 1111 = 0101<br />

0101 XOR 1111 = 1010<br />

6.2 Zahlendarstellungen<br />

Neben dem Dezimalsystem sind alle weiteren Zahlensysteme, die vor allem<br />

in der Informatik verwendet werden, sogenannte Stellenwertsysteme.<br />

Definition - Stellenwertsystem:<br />

Jede reelle Zahl wird durch eine Folge von Ziffern beschrieben:<br />

Wie eine Ziffer <strong>zum</strong> Wert der Zahl beiträgt, hängt von ihrer Position bezüglich des Kommas<br />

ab. Sie wird dazu mit (B = Basis des Zahlensystems multipliziert. Für den Wert der Zahl<br />

ergibt sich damit:<br />

X = ± ( ZmB<br />

X = ±<br />

+ ∞<br />

∑<br />

μ=<br />

−∞<br />

m<br />

ZμB<br />

+ Z<br />

μ<br />

m − 1<br />

B<br />

≈ ±<br />

m−1<br />

+ n<br />

∑<br />

μ=<br />

−m<br />

1<br />

+ ... + Z1B<br />

+ Z 0B<br />

ZμB<br />

Beispiel:<br />

123,4 = 1⋅102 + 2⋅101 + 3⋅100 + 4⋅10-1<br />

μ<br />

0<br />

+ Z<br />

Zahlensystem Zahlenbasis Ziffern Beispiel<br />

Dualsystem B=2 0, 1 11111001100<br />

Fünfersystem B=5 0, 1, 2, 3, 4 30441<br />

Siebenersystem B=7 0, 1, 2, 3, 4, 5, 6 5551<br />

Oktalsystem B=8 0, 1, 2, 3, 4, 5, 6, 7 3714<br />

Dezimalsystem B=10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 1996<br />

Hexadezimalsystem B=16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 7CC<br />

A, B, C, D, E, F<br />

Divisionsrestverfahren:<br />

13 zur Basis 10 = 1101 zur Basis 2<br />

denn:<br />

13:2=6 Rest 1<br />

6:2= 3 Rest 0<br />

3:2= 1 Rest 1<br />

1:2= 0 Rest 1<br />

− 1<br />

B<br />

−1<br />

+ Z<br />

− 2<br />

B<br />

−2<br />

...)


Beispiele -46-<br />

Das Konvertieren (Umwandeln) von Dezimalzahlen in Zahlen eines anderen Zahlensystems<br />

bzw. umgekehrt, oder zwischen den anderen Zahlensystemen, basiert auf der Definition der<br />

Stellenwertsysteme. Daraus wurde ein Konvertierungsverfahren, das „Divisions-Restwert-<br />

Verfahren“, entwickelt, das allgemein einsetzbar ist (es beruht darauf, dass man nach<br />

Abspalten von Resten sukzessive versucht, den neuen Basiswert aus der verbliebenen Zahl<br />

„auszuklammern“ und dann nach Potenzen des neuen Basiswertes zusammenfasst).<br />

Beispiel - Umwandlung Dezimalzahl in Dualzahl: 4510 = X2 ?<br />

45 : 2 = 22 Rest: 1, also 45 = 22 · 2 + 1<br />

22 : 2 = 11 Rest: 0, also 45 = (11 · 2 + 0) · 2 + 1<br />

11 : 2 = 5 Rest: 1, also 45 =<br />

= ((5 · 2 + 1) · 2 + 0) · 2 + 1<br />

= 5 · 23 + 1 · 22 + 0 · 21 + 1 · 20<br />

5 : 2 = 2 Rest: 1<br />

2 : 2 = 1 Rest: 0<br />

1 : 2 = 0 Rest: 1<br />

Ergebnis: 4510 = 1011012<br />

6.2.1 Zahlenkonvertierung zwischen 2, 8 und 16er-System<br />

Berechnung des Binärsystems: 471110 = 10010011001112<br />

Damit ist es trivial, aus der Binär-Lösung sofort die weiteren Zahlen zu berechnen. Man fasst<br />

drei oder vier Bits zusammen:<br />

a) Dual nach Hexadezimal<br />

- Berechnen der Dualzahl<br />

- Zusammenfassen von 4 Bits, von rechts beginnend<br />

- 00010010011001112 = 1 0010 0110 01112 = 0001 0010 0110 01112<br />

- Alle „vier Bits“ in eine hexadezimale Zahl umwandeln<br />

- 1 2 6 7 16<br />

b) Dual nach Oktal<br />

- Berechnen der Dualzahl<br />

- Zusammenfassen von 3 Bits, von rechts beginnend<br />

- 00010010011001112 = 1 001 001 100 1112 = 001 001 001 100 1112<br />

- Alle „drei Bits“ in eine hexadezimale Zahl umwandeln<br />

- 1 1 1 1 4 7 8


Beispiele -47-<br />

6.3 Einer-Komplement<br />

Regeln zur Umwandlung:<br />

• Die Subtraktion einer positiven Zahl wird auf die Addition des Komplements<br />

zurückgeführt.<br />

• Das Komplement einer Zahl ist die bitweise Vertauschung von Nullen und Einsen.<br />

• Falls ein Überlauf stattfindet, muss diese „Eins“ <strong>zum</strong> Ergebnis hinzuaddiert werden.<br />

Beispiel:<br />

+43 01010112<br />

- 27 00110112<br />

---------------------------------<br />

+43 01010112<br />

+ -27 11001002<br />

---------------------------------<br />

+ 1 0001111<br />

1<br />

---------------------------------<br />

Σ 16 00100002<br />

6.4 B-Komplement<br />

Regeln zur Umwandlung:<br />

• Die Subtraktion einer positiven Zahl wird auf die Addition des 2-Komplements<br />

zurückgeführt.<br />

• Das Komplement einer Zahl ist die bitweise Vertauschung von Nullen und Einsen.<br />

Danach die Addition von Eins.<br />

• Ein Überlauf wird ignoriert.<br />

Beispiel:<br />

+43 01010112<br />

- +27 00110112<br />

---------------------------------<br />

+43 01010112<br />

+ -27 11001012<br />

---------------------------------<br />

+ 1 0010000<br />

---------------------------------<br />

Σ 16 00100002


Literatur -48-<br />

7 Literatur<br />

[1] Duden der Informatik Dudenverlag Mannheim<br />

[2] Giloi, Wolfgang K. <strong>Rechner</strong>architektur, Springer-Verlag, Berlin<br />

[3] Oberschelp, W. Vossen, G. <strong>Rechner</strong>aufbau und <strong>Rechner</strong>struktur, Oldenbourg-Verlag<br />

[4] http://de.wikipedia.org/wiki/Von-Neumann-Architektur<br />

[5] Heinz-Peter Gumm und Manfred Sommer, Einführung in die Informatik<br />

(Gebundene Ausgabe - 20. Oktober 2008), Verlag: Oldenbourg; Auflage: 8., vollst. überarb.<br />

Auflage. (20. Oktober 2008), ISBN-10: 3486587242, ISBN-13: 978-3486587241<br />

[6] Script der Vorlesung


Indexverzeichnis -49-<br />

8 Indexverzeichnis<br />

A<br />

Adressbus................................................................................................................................................................................... 8<br />

Arithmetikbefehle .................................................................................................................................................................... 17<br />

Aufbau des Programms .............................................................................................................................................................. 9<br />

Ausgabeeinheit........................................................................................................................................................................... 8<br />

B<br />

Befehlseingabe ......................................................................................................................................................................... 21<br />

Befehlsgruppen ........................................................................................................................................................................ 24<br />

Einlesen einer Zahl ............................................................................................................................................................. 24<br />

Operattion auf einem Register und die Speicherung........................................................................................................... 24<br />

Register mit einem Wert belegen ........................................................................................................................................ 24<br />

Sprung, wenn der Akku größer Null ................................................................................................................................... 25<br />

Befehlsliste............................................................................................................................................................................... 16<br />

Beispiele................................................................................................................................................................................... 26<br />

Abfragen von Bits............................................................................................................................................................... 34<br />

Berechnen einer Formel ...................................................................................................................................................... 31<br />

Berechnen einer Summe ..................................................................................................................................................... 38<br />

Bestimmen Maximum beliebiger Zahlen ............................................................................................................................ 33<br />

Bestimmen Maximum dreier Zahlen................................................................................................................................... 32<br />

Einlesen einer Zahl, kopieren ins Register Null.................................................................................................................. 29<br />

Kopieren einer Konstante in den Akkumulator................................................................................................................... 26<br />

Kopieren und addieren von Konstante ................................................................................................................................ 26<br />

Maximal Bestimmung......................................................................................................................................................... 36<br />

Setzen von Bits ................................................................................................................................................................... 34<br />

B-Komplement......................................................................................................................................................................... 47<br />

Breakpoint................................................................................................................................................................................ 42<br />

D<br />

Datenbus..................................................................................................................................................................................... 8<br />

Debugger.................................................................................................................................................................................. 42<br />

Divisionsrestverfahren ............................................................................................................................................................. 45<br />

E<br />

E/A-Befehle ............................................................................................................................................................................. 19<br />

Ein- und Ausgabeeinheit .......................................................................................................................................................... 13<br />

Einer-Komplement................................................................................................................................................................... 47<br />

Einführung ................................................................................................................................................................................. 5<br />

Eingabeeinheit............................................................................................................................................................................ 8<br />

G<br />

Grundlagen............................................................................................................................................................................... 44<br />

H<br />

Haltepunkt................................................................................................................................................................................ 42<br />

J<br />

John von Neumann..................................................................................................................................................................... 6


Literatur -50-<br />

L<br />

Literatur.................................................................................................................................................................................... 48<br />

Logikbefehle ............................................................................................................................................................................ 18<br />

Logische Verknüpfungen ......................................................................................................................................................... 44<br />

M<br />

Menüstruktur.............................................................................................................................................................................. 9<br />

O<br />

Oberfläche.................................................................................................................................................................................. 9<br />

P<br />

Programmbemerkungen ........................................................................................................................................................... 16<br />

R<br />

Rechenwerk.......................................................................................................................................................................... 8, 16<br />

Register ................................................................................................................................................................................ 8, 15<br />

Reihenfolge .............................................................................................................................................................................. 17<br />

S<br />

Schalterleiste ............................................................................................................................................................................ 12<br />

Schiebebefehle ......................................................................................................................................................................... 18<br />

Speicher.................................................................................................................................................................................... 14<br />

Sprungbefehle .......................................................................................................................................................................... 19<br />

Steuerbefehle............................................................................................................................................................................ 20<br />

Steuerwerk ........................................................................................................................................................................... 7, 15<br />

T<br />

Transportbefehle ...................................................................................................................................................................... 17<br />

V<br />

Version 3.................................................................................................................................................................................... 5<br />

Debugger............................................................................................................................................................................... 5<br />

Farbdarstellung ..................................................................................................................................................................... 5<br />

Löschen der Register............................................................................................................................................................. 5<br />

Löschen des Speichers .......................................................................................................................................................... 5<br />

Tempdateien.......................................................................................................................................................................... 6<br />

Z<br />

Zahlendarstellungen ................................................................................................................................................................. 45<br />

Zahlenkonvertierung zwischen 2, 8 und 16er-System.............................................................................................................. 46<br />

Zweier-Komplement ................................................................................................................................................................ 47

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!