Woher weiß der Computer was er machen muss?

10 Antworten

Das ist heute auch nicht anders als früher. Die ersten Computer waren ja noch recht übersichtlich und einsichtlich, wenn man z.B. an einen Computer wie einen relaisrechner Zuse Z1 denkt. Die Befehle sind bei solchen Computern, aber auch bei den heutigen Prozessoren, im System fest verdrahtet. Bei früheren Prozessoren war das ganze auch noch recht übersichtlich , o dass man (wie z.B. ich :) ) viele der Hexcodes für Befehle auswendig kannte und fast ohne eine Liste der Assembler-Codes auskommen konnte. Beim 8080 und Z80 war halt 78 der Befehl, um das Register B in den Akumulator A zu laden, C2 war der Befehl JNZ, der im Falle einer Nicht-Null-Bedingung einer vorherigen Vergleichoperation zur Adresse springen sollte, die danach in zwei Bytes mitgeteilt wurde. CA war der befehl, der das ganze bei Null_bedingung machte (JZ).

Alle Befehle, die der Prozessor irgendiwe verarbeitet läuft auf einer derartig stark abstraierten Ebene ab, eben die Maschinenebene. Erst durch viel Programmierung auf dieser Maschinenebene wird ein Betriebssystem erstellt, und es werden Programme erstellt, die für Menschen besser zu verstehende Programmiersprachen entweder abarbeiten (Interpreter) oder in Maschinencode umsetzen (Compiler).

Nur durch dein Einsatz von Zigtausend Programmierern wurde es möglich, dass der Computer ein System ist, welches heute zu Hause ohne Programmierkenntnisse eingesetzt werden kann. Egal ob Windows, Macintosh oder Linux/Unix.


omnivore17  04.06.2018, 00:02
wenn man z.B. an einen Computer wie einen relaisrechner Zuse Z1 denkt.

Der Z1 war rein mechanisch!! Der steht übrigends im deutschen Technikermuseum in Berlin. Die Z1 hatte keine Relais. Das was du meinst ist die Z3. Diese hatte als erster programmierbarerer Rechner der Welt Telefonrelais der deutschen Reichspost.

1

Zuerst wird eine HW, der Prozessor gebaut, der verschiedene Befehle kennt. ZB:

Hole Daten vom Speicher, schreibe in den Speicher, Zähle zusammen, nimm nicht den nächsten Befehl sonder verzweige.....usw.

Grundsätzlich gibt es immer oben ein linkes und rechtes Register (interner Speicherplatz) und unten das Ergebnis.

Die Befehle sind im RAM und werden abgearbeitet. Je nach Befehl kann das unterschiedlich lang sein, aber ein Kurzer Befehl könnte sein 583245. 58 heißt dann zB hole vom Speicher, der Speicherplatz ist dann der Inhalt von Register 2 plus 45 und stelle den Inhalt in Register 3.

Der nächste Befehl könnte sein 2A37. 2A könnte heißen zusammenzählen den Inhalt von Register 7 und 3 usw

Also müssen nur Befehle in richtiger Reihenfolge im Speicher stehen.

Nach dem Einschalten gibt es einen bestimmten Speicherplatz wo es beginnt, zB FF10. Das sind zwar nun alles nur Hausnummern, aber so irgendwie geht das. Bei jedem Prozessor ist das irgendwie anders. Intel startet irgendwo was früher als oberste Grenze gesehen wurde, Sinclair bei 0000.

Es gibt CPUs die viel Befehle beherrschen, und dafür langsamer sind oder RISC CPUs sie mit wenigen Befehlen schneller arbeiten. Die einen können zB echt multiplizieren, die anderen müssen statt dessen oft addieren

Das waren ein paar grobe Hinweise und zeigt nichts von der Komplexität wenn man auch Unterbrechungen durch Zeit, Tastatur, HD.... berücksichtigen muss oder die Arbeit auf mehrere Kerne aufteilen möchte.

Du stellst eine echt schöne Frage!!

Es ist nicht so, dass der Computer macht was du willst. Der kann nicht denken. Der führt eben nur - wie du richtig sagst - befehle aus.

Wichtig zum rechnen sind im Prinzip 3 Dinge (eigentlich 4). Erstens das ein Speicher, zweitens Register im Rechenwerk und drittens Operationsregister. Das vierte sind die Stackregister, welche man für Unterprogramme benötigt (war anfangs noch nicht vorgesehen).

das Grundprinzip der Rechentechnik ist seit den Anfängen in den 40er Jahren gleich:

Man holt etwas aus dem Speicher und schiebt es in eines der 4 Register (ja mehr hat ein x86 nicht). Und dann kommen nur noch simple Befehle wie ADD, SUB, MUL, AND, usw. Das sind so die Arithmetischen Funktionen. Diese beruhen auf einfachster Technik. Siehe hierzu bitte "Volladder". Substrahieren kann ein heutiger Rechner eigentlich. Er rechnet nur eine Addition mit einem invertieren Minuenten.

Dann gibt es natürlich noch einige Grundoperationen der Logikrechnung: Und, Oder, Nicht, XOR, usw.

Am Ende schiebt man eigendlich nur diese Registerwerte (als Operanden) durch ein Rechenregister und erhält auf dem ersten angegeben register das Ergebnis, welches man wieder in den Speicher schieben kann.

Alles andere was heute so passiert ist eine Abstraktion und viel vordefiniertes.

Bitte schau dir mal das Video vom Prof. Dr. Horst Zuse an, da wird dir vielleicht einiges klarer:

https://www.youtube.com/watch?v=_YR5HhWlOgg

Ein Prozessor hat einen Befehlssatz mit dem er arbeitet. Heisst:

Prozessoren haben Eingänge in die bei der Herstellung der Prozessoren schon festgelegt wird was Sie bei welcher Beschaltung tun sollen. z.B. 8 bit Befehlssatz

00000000 x y

wobei x y 8 Bit Zahlen

Schiebe Wert x in Register Y

usw.

Darauf aufbauend wird durch kombination dieser axiomatischen Befehle immer kompliziertere Funktionalität aufgebaut bis hin zu Compilern.

Quellcode wird von einem Compiler in Maschinensprache übersetzt. Ein Compiler ist ein Programm, das ebenfalls in einer Programmiersprache geschrieben und dann von einem anderen Compiler übersetzt wurde.

Da stellt sich dann natürlich die Frage, wo denn der erste Compiler herkam. Nun, die ersten Programme wurden direkt in Maschinencode geschrieben, der dann zum Beispiel in eine Lochkarte gestanzt wurde.