Ich habe mich neulich mal gefragt, wie der Prozessor If´s regelt. Er kann ja einfach Impulse senen und auf diese weise rechnen und dinge veranlassen. Aber wer entscheidet, wenn im proramm steht "Du das NUR Wenn" ? Der Prozessor kann ja nicht "denken" sonder nur machen. Weiss evtl. jemand wie das funktioniert?
Wie setzt der Prozessor ein "if" um?
-
-
Der Prozessor verarbeitet Befehle im Sogenannten Intel-HEX-Code.
Dieser Code ist mehr oder minder 1:1 zu Assembler umgesetzt.In Assembler gibt es den sogenannten GOTO-Befehl, bzw CALL-Befehl.
Dabei springt die Verarbeitung an eine andere Position im Programmcode.Wenn in einer Hochsprache - wie zum Beispiel C++ - ein IF vorkommt, dann wandelt der Compiler (unter Windows) das ganze auf das Pendant in PE (Portable Executable) - das Dateiformat, der *.exe-Anwendungen um - Windows rechnet bei der Ausführung des Programm das ganze auf Assembler, bzw Maschinencode um.
Anbei findest du ein Programm, das ich in der Schule schreiben musste.
Es ist das "Betriebssystem" eines digitalen Voltmeters.Wenn du dir folgende Zeilen ansiehst...:
... dann hast du Assembler-Code ;DDieser Code überprüft, ob die Einerstelle der eingelesenen Spannung auf 10 ist. Also:
Die Erklärung zu dem Code:
isteins10 ist ein sogenanntes label. es entspricht einer sprungadresse und man kann mit goto diesen code ausführen.
movf heißt "Move File" und hier wird ein Byte auf eine bestimmte Speicheradresse geschoben.
Die Parameter sind eins und w. Das heißt das Byte mit dem Namen eins (Befehl: EINS EQU 0x34) wird in das Arbeitsregister w geschoben.
Nun wird die Bitmaske 00001010 (= 10) vom Arbeitsregister abgezogen.
btfsc heißt "Bit Test File, Skip if Clear". Dieser Befehl prüft ein Bit auf den Inhalt. Wenn der Inhalt 0 ist, wird der nächste Befehl übersprungen.
Die Parameter sind status und z. status steht für das Sogenannte Status-Register und z für das sogenannte Zerobit. Wenn der vorherige Befehl das Ergebnis 0 geliefert hat, wird dieses Bit auf 1 gesetzt.
Das gesamte Gebilde heißt also: Wenn der vorherige Befehl nicht 0 Ergeben hat, wird der nächste Befehl übersprungen, oder Wenn die Subtraktion nicht 0 ergeben hat, wird übersprungen, oder eben Wenn eins nicht den Wert 10 hatte, wird der nächste Befehl übersprungen.
goto ist der Sprungbefehl. Er springt hier auf den Code mit dem Label eins 10.Also mehr oder minder:
---------------------------------------------------
Jeder Assemblerbefehl und jeder Operand entspricht im Intel-HEX-Format einer Zahl.
Diese Zahl wird nach dem Von-Neumann-Prinzip geladen.
Jede Zahl entspricht wiederum einer Bitmaske.
Jedes Bit besteht aus 0ern und/oder 1ern.
Diese Bits entsprechen laut TTL (Transistor-Transistor-Logik) wiederum 0V oder 5V, also kein Strom oder Strom.Ein Transistor, arbeitet in der Standardvariante mit 0,7 Volt Minimum.
Durch Widerstände, etc. benötigt man etwas mehr.
Der Bereich für 1 ist dann etwa > 3,5VWenn die Bitmasken, die aus dem ROM - dem Programmspeicher - gelesen werden dann bestimmte Werte haben, dann ergeben verschiedene Und-Gatter auf Transistorbasis verschiedene Ausgänge. (Deshalb sind auch so viele Transistoren notwendig)
Je nach Ausgang wird die sogenannte ALU (Arithmetical and Logical Unit) angesteuert.
Diese führt die Befehle aus und liefert sie zurück.
Damit werden die Register beschrieben und der Befehl wurde ausgeführt.-------------------------------------------------------
Alles klar? ;D
Die letzten 5 Jahre HTL-Elektrotechnik/Informationstechnik haben doch etwas gebracht xD -
Cool, vielen Dank! Besonders für die ausführliche erklärung