Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...
Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...
Handbuch zum Rechner-Simulationsprogramm ReSim - HS-Harz M ...
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