faecher:informatik:oberstufe:techinf:assembler:sprungbefehle:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:techinf:assembler:sprungbefehle:start [20.09.2021 19:49] – [Unbedingter Sprungbefehl - JMP] sbelfaecher:informatik:oberstufe:techinf:assembler:sprungbefehle:start [27.09.2021 16:27] (aktuell) – [Verzweigungen und (Sprung-)Schleifen] sbel
Zeile 39: Zeile 39:
 Die Namen der bedingten Sprungbefehle (JXXX) sind nach folgendem Schema zusammengesetzt: Die Namen der bedingten Sprungbefehle (JXXX) sind nach folgendem Schema zusammengesetzt:
  
-  * J : immer erster Buchstabe, "JUMP" +  * **J** : immer erster Buchstabe, "JUMP" 
-  * N : evtl. zweiter Buchstabe, "NOT", steht für die Negierung der Bedingung +  * **N** : evtl. zweiter Buchstabe, "NOT", steht für die Negierung der Bedingung 
-  * Z,C,S,O,P : wenn Zero-/Carry-/Sign-/Overflow-/Parityflag gesetzt +  * **Z,C,S,O,P** : wenn Zero-/Carry-/Sign-/Overflow-/Parityflag gesetzt 
-  * E : Equal, gleich +  * **E** : Equal, gleich 
-  * A,B : Above/Below, größer/kleiner bei vorzeichenloser Arithmetik +  * **A,B** : Above/Below, größer/kleiner bei vorzeichenloser Arithmetik 
-  * G,L : Greater/Less, größer/kleiner bei Arithmetik mit Vorzeichen+  * **G,L** : Greater/Less, größer/kleiner bei Arithmetik mit Vorzeichen
  
 +Damit kann man eine ganze Menge von bedingten Sprüngen realisieren:
 +
 +{{ :faecher:informatik:oberstufe:techinf:assembler:sprungbefehle:auswahl_001.png |}}
 +
 +
 +===== Verzweigungen und (Sprung-)Schleifen =====
 +
 +Verzweigungen und Wiederholungsschleifen werden in Assemblersprache durch Sprungbefehle
 +realisiert. Eine Verzweigung mit zwei Zweigen wird grundsätzlich folgendermaßen aufgebaut (die
 +Namen der Marken sind natürlich frei wählbar):
 +
 +<code asm>
 +cmp Operand1, Operand2
 +jxxx Wahr-Zweig ; Bedingter Sprungbefehl, überspringt den Falsch-Zweig
 +  .
 +  ;Falsch-Zweig, wird ausgeführt, wenn Bedingung falsch
 +  .
 +  jmp Verzweigungsende; Wenn falsch Zweig, springe zum Ende der Verzweigung
 +
 +Wahr-Zweig:
 +  .
 +  ;Wahr-Zweig, wird ausgeführt, wenn Bedingung wahr
 +  .
 +Verzweigungsende:
 +  .
 +  ; Weiterer Programmablauf
 +</code>
 +Der Wahrzweig kann auch entfallen, dann hat man einen bedingt ausgeführten Befehlsblock.
 +
 +
 +===== (Sprung-)Schleifen =====
 +
 +Die Abbruchbedingungen der Schleifen können das Erreichen eines bestimmten Zählwertes sein (Zählschleifen) oder datenabhängig formuliert werden. Die Grundkonstruktion einer (nicht abweisenden) Schleife kann folgendermaßen aussehen:
 +
 +<code>
 +Initialisierung der Schleife
 +
 +Schleifenstart:
 +   Schleifenrumpf (Befehle)
 +   Schleifenbedingung aktualisieren (z.B. Zählwert ändern) und auswerten,
 +   bedingter Sprung zu "Schleifenstart"
 +</code>
 +
 +===== Schleifen mit Loop Befehlen=====
 +
 +Der Loop-Befehl ist ein Spezialbefehl für die Programmierung von Schleifen (engl. Loop = Schleife). Der Loop-Befehl erniedrigt CX bzw. in 32-Bit-Segmenten ECX und springt anschließend zu einem als Operanden angegebenen Sprungziel, falls CX bzw. ECX nicht 0 ist. 
 +
 +Damit lassen sich sehr einfach Zählschleifen programmieren, deren Zählindex in CX/ECX geführt wird und abwärts bis auf 0 läuft.
  • faecher/informatik/oberstufe/techinf/assembler/sprungbefehle/start.1632167355.txt.gz
  • Zuletzt geändert: 20.09.2021 19:49
  • von sbel