Grundlagen Assemblerprogrammierung 12

Sprungbefehle:

Sprungbefehle bewirken eine Verzweigung im Programm. Sie können von einer Bedingung abhängen. Man unterscheidet zwischen relativen (JR-Befehl) und absoluten (JP-Befehl) Sprungbefehlen. Dem JP-Befehl folgt direkt eine Adresse, an die das Programm ggf. springen soll. Beim relativen Sprung werden soviele Bytes "übersprungen" wie der Term nach dem Befehl ausdrückt.

Beispiel eines absoluten Sprunges:
 
JP Z,&1FFF Springt nach &1FFF, wenn Z=1

Beisplel eines relativen Sprunges:
 
JR &23 Springt 35 Bytes nach vorne
JR &E7 Springt 25 Bytes zurück

Ein relativer Sprung kann von -127 bis +128 Bytes erfolgen. Für die negative Sprungrichtung nimmt man die Anzahl zu überspringender Bytes und subtrahiert diesen Wert von 256 um den Term zu erhalten, der nach dem JR Befehl hingehört.

Relative und absolute Spränge kann man von einer Bedingung abhängig machen. So wird z.B. beim 8efehl JP M,&1FFF nur gesprungen, wenn das Negativ-Flag gesetzt ist.

Folgende Bedingungen sind nützbar:
 
Befehl
Sprung, wenn
--------------------------------------
--------------------------------------
JP C,xxyy
CY=1 (Übertrag)
JP M,xxyy
S=1 (negativ)
JP NC,xxyy
CY=0 (kein Übertrag)
JP NZ,xxyy
Z=0 (ungleich 0)
JP P,xxyy
S=0 (positiv, also>=0)
JP PE,xxyy
P=1 (Überlauf)
JP PO,xxyy
P=0 (kein Überlauf)
JP Z,xxyy
Z=1 (gleich 0)
JP xxyy
springt immer

Auch relative Spränge kann man von einer Bedingung abhängig machen:
 
Befehl
Sprung, wenn
--------------------------------------
--------------------------------------
JR NZ,tt
Z=0 (ungleich 0)
JR Z,tt
Z=1 (gleich 0)
JR NC,tt
CY=0 (kein Übertrag)
JR C,tt
CY=1 (Übertrag)
JR tt
springt immer

Absolute Spränge ohne Bedingung können auch an die Adresse erfolgen, die im HL-, IX- oder IY-Register steht. Z.B. JP (HL)

Ein weiterer Sprungbefehl ist der DJNZ-Befehl. Mit ihm kann man konfortabel eine Schlaufe programmieren. Der Befehl setzt sich aus folgenden Befehlen zusammen:

DEC B
JR NZ,tt

Er decrementiert das B-Register und springt solange zu seinem relativen Sprungziel, bis B=0 wird. Um auch hier einen Sprung in die negative Richtung zu bewirken, muss die Anzahl der zu überspringenden Bytes zuerst am Wert 256 subtrahiert werden, da Sprünge von max. 128 Bytes in jede Richtung zugelassen sind.