Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
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] sbel | faecher: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, " | + | |
- | * N : evtl. zweiter Buchstabe, " | + | |
- | * Z,C,S,O,P : wenn Zero-/ | + | |
- | * E : Equal, gleich | + | |
- | * A,B : Above/ | + | |
- | * G,L : Greater/ | + | |
+ | Damit kann man eine ganze Menge von bedingten Sprüngen realisieren: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== 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, | ||
+ | . | ||
+ | ; | ||
+ | . | ||
+ | jmp Verzweigungsende; | ||
+ | |||
+ | Wahr-Zweig: | ||
+ | . | ||
+ | ; | ||
+ | . | ||
+ | Verzweigungsende: | ||
+ | . | ||
+ | ; Weiterer Programmablauf | ||
+ | </ | ||
+ | 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: | ||
+ | |||
+ | < | ||
+ | Initialisierung der Schleife | ||
+ | |||
+ | Schleifenstart: | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ===== 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, |