6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Rechnergrundlagen Teil 2 - 21 - Prof. Dipl.-Ing. Komar<br />
Programmverzweigungsbefehle JMP – Jcc – LOOP – CALL – INT<br />
Die kontinuierliche Bearbeitung eine sequentiellen Programms kann auf unterschiedliche Arten unterbrochen<br />
und an einer anderen Stelle fortgesetzt werden:<br />
- mit /ohne Speicherung der Rückkehradresse zur erneuten Aufnahme der Abarbeitung an der zuvor<br />
verlassenen Stelle (CALL, INT / JMP )<br />
- unabhängig oder abhängig vom aktuellen Zustand der CPU ( JMP / JBedingung )<br />
- programmiert oder asynchron durch externe Ereignisse (CALL, INT / Hardwareinterrupt )<br />
Wird die Rückkehradresse (Adresse des nächsten auszuführenden Befehls ) vor dem Sprung auf dem Stapel<br />
abgelegt, so handelt es sich um Unterprogramme oder Interrupt-Service-Routinen ISR .<br />
Ansonsten um bedingte und unbedingte Sprungbefehle.<br />
Während alle unbedingten Sprungbefehle stets zu einer Programmverzweigung führen, erfolgt bei den bedingten<br />
Sprüngen das Verzweigen in Abhängigkeit vom aktuellen Zustand <strong>eines</strong> Bits im Flagregister des Prozessors und<br />
damit in Abhängigkeit vom Ausgang einer zuvor ausgeführten Operation.<br />
Für den Übersetzungsvorgang ist es dabei wichtig zu wissen, ob sich das Sprungziel einer Programmverzwei -<br />
gung innerhalb des aktuellen Segments befindet oder nicht. Man unterscheidet darum:<br />
- Intra-Segment-Sprünge<br />
Das Sprungziel liegt im aktuellen Segment und es wird nur ein neuer 16 Bit Offset für IP benötigt.<br />
- Inter-Segment-Sprünge<br />
Das Sprungziel liegt in einem anderen als dem momentan aktiven Codesegment und es wird ein neuer<br />
Segmentselektor für CS und ein Offset für IP benötigt<br />
Das Sprungziel kann dabei wie folgt adressiert werden:<br />
- Sprungziel relativ zum momentanen Stand von IP im selben Segment (Intra-Segment) gespeichert als<br />
1 Byte Displacement (-128.. +127) z.B. bedingte Sprungbefehle sind relative Sprünge mit kurzer Distanz<br />
- Sprungziel relativ zum momentanen Stand von IP im selben Segment (Intra-Segment) gespeichert als<br />
2 Byte Displacement (-32768.. +32767)<br />
- Sprungziel als absolute Adresse im selben Segment (Intra -Segment), gespeichert in einem Register oder in<br />
einer Speicheradresse ( je 2 Byte ) sog. Indirekt-Sprung<br />
- Sprungziel als absolute Adresse in einem anderen Segment (Inter-Segment) mit Angabe von<br />
Segmentselektor und Offset, gespeichert im Befehl als Immediate Operand mit 4 Byte, Direkt-Sprung<br />
- Sprungziel als absolute Adresse in anderem Segment (Inter-Segment) mit Angabe von Segmentselektor und<br />
Offset, gespeichert als Doppeiwort (IP, CS ) in einer Speicheradresse, Indirekt-Sprung<br />
Unbedingter Sprung JMP (nur Intrasegment-Sprünge )<br />
JMP ziel Springe immer zur Zieladresse JMP 1000<br />
JMP register Springe immer zur Adresse im Register JMP AX<br />
JMP speicherwort Springe immer zur Adresse im Speicherwort JMP [1200]<br />
JMP [reg] Springe zu Adresse im Speicherwort, dessen Adresse im Register steht JMP [BX]<br />
Bedingte Sprünge<br />
Vor einem bedingten Sprung muß zunächst die Sprungbedingung untersucht werden. Dies geschieht in der<br />
Regel durch einen Test-, Vergleichs- oder Zählbefehl, der mit seinem Ergebnis die Bedingungsbit des Status-<br />
registers verändert. Diese werden dann durch die bedingten Sprungbefehle ausgewertet.<br />
Ist die Sprungbedingung erfüllt, so wird der Sprung ausgeführt, anderenfalls wird mit dem nächsten Befehl<br />
fortgesetzt<br />
Alle bedingten Sprungbefehle springen mit einer relativen 8-Bit -Adresse im Segment (intrasegment).<br />
Durch diesen 8-Bit-Abstand (displacement) sind nur Sprungziele erreichbar, die sich im Bereich von 128 Bytes<br />
vor oder 127 Bytes hinter dem Sprungbefehl befinden.<br />
Jcc ziel cc = mnemonische Abkürzung der Bedingungen<br />
Viele dieser Sprungbefehle lassen sich mit verschiedenen mnemotechnischen Abkürzungen formulieren, die<br />
aber durch den Assembler in einen gemeinsamen Opcode umgesetzt werden. Bei der Disassemblierung mit