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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:informatik:oberstufe:techinf:assembler:sprungbefehle:start [20.09.2021 21:54] sbelfaecher:informatik:oberstufe:techinf:assembler:sprungbefehle:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Sprungbefehle ====== 
-Sprungbefehle sind in Assemblersprache von elementarer Bedeutung, weil Verzweigungen und 
-Wiederholungen mit Sprungbefehlen realisiert werden. Man unterscheidet **unbedingte** Sprungbefehle und **bedingte** Sprungbefehle. 
- 
-===== Unbedingter Sprungbefehl - JMP ===== 
- 
-Mit dem Befehl JMP, Jump, Springe, wird ein unbedingter Sprung ausgeführt. Die Syntax ist 
- 
-<code asm> 
-JMP SPRUNGZIEL 
-</code> 
- 
-Das Sprungziel ist in der Regel eine Marke, die irgendwo im Programm erklärt ist. Eine Sprungmarke wird durch ihren Namen gefolgt von einem Doppelpunkt festgelegt:  
- 
-<code asm> 
-JMP programmende 
- 
-... 
-... ;weiterer Code, der niemals ausgeführt wird 
-... 
- 
-programmende: 
-   mov   eax,             ;system call number (sys_exit) 
-   int   0x80               ;call kernel 
-</code> 
- 
-===== Bedingte Sprungbefehle ===== 
- 
-Bedingte Sprungbefehle sind von Bedingungen abhängig. Ist die Bedingung wahr, wird der Sprung ausgeführt, ist sie falsch, wird er nicht ausgeführt. 
- 
-Es gibt viele unterschiedliche bedingte Sprungbefehle, die sich auf unterschiedliche Bedingungen beziehen. Die Bedingung ist im Namen des Befehles angedeutet und bezieht sich entweder direkt auf Flags oder auf einen vorausgegangenen Compare-Befehl (CMP).  
- 
-Beispiele dafür sind: 
- 
-  * JC (Jump if Carry, Springe wenn Carryflag gesetzt) 
-  * JG (Jump if greater, Springe wenn größer) 
-  * JNE (Jump if not equal, Springe wenn nicht gleich) 
- 
-Die Namen der bedingten Sprungbefehle (JXXX) sind nach folgendem Schema zusammengesetzt: 
- 
-  * **J** : immer erster Buchstabe, "JUMP" 
-  * **N** : evtl. zweiter Buchstabe, "NOT", steht für die Negierung der Bedingung 
-  * **Z,C,S,O,P** : wenn Zero-/Carry-/Sign-/Overflow-/Parityflag gesetzt 
-  * **E** : Equal, gleich 
-  * **A,B** : Above/Below, größer/kleiner bei vorzeichenloser Arithmetik 
-  * **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 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> 
-cmp Operand1, Operand2 
-jxxx Wahr-Zweig 
-; Bedingter Sprungbefehl 
-. 
-. 
-;Falsch-Zweig, wird ausgeführt, wenn Bedingung falsch 
-. 
-jmp Verzweigungsende 
-Wahr-Zweig: 
-. 
-. 
-;Wahr-Zweig, wird ausgeführt, wenn Bedingung wahr 
-. 
-Verzweigungsende: 
- 
-</code> 
-Der Wahrzweig kann auch entfallen, dann hat man einen bedingt ausgeführten Befehlsblock. 
-Ein Beispiel für obige Konstruktion ist: 
  
  • faecher/informatik/oberstufe/techinf/assembler/sprungbefehle/start.1632167667.txt.gz
  • Zuletzt geändert: 20.09.2021 21:54
  • von sbel