Wie setzt der Prozessor ein "if" um?

  • 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?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • 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...:

    Code
    isteins10	movf	eins, w		; ist eins schon 10?
    		sublw	b'00001010'
    		btfsc	status, z
    		goto	eins10


    ... dann hast du Assembler-Code ;D

    Dieser Code überprüft, ob die Einerstelle der eingelesenen Spannung auf 10 ist. Also:

    Code
    if(eins == 10)

    Die Erklärung zu dem Code:

    Code
    isteins10	movf	eins, w		; ist eins schon 10?


    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.

    Code
    sublw	b'00001010'


    Nun wird die Bitmaske 00001010 (= 10) vom Arbeitsregister abgezogen.

    Code
    btfsc	status, z


    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.

    Code
    goto	eins10


    goto ist der Sprungbefehl. Er springt hier auf den Code mit dem Label eins 10.

    Also mehr oder minder:

    Code
    if(eins != 10)
    eins10();

    ---------------------------------------------------

    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,5V

    Wenn 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 ;)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!