18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!