Revenir au plan du site
Sauts inconditionnels sans retour
JR
Cette instruction permet d'effectuer un saut relatif, en avant ou en arrière avec une amplitude 8 bits, soit de -128 à 127. Il n'existe pas de version 16 bits de ce saut relatif. Certains assembleurs pourront automatiquement le remplacer par un saut 16 bits absolu mais comme le saut ne sera plus relatif, le code ne pourra s'exécuter correctement que de l'emplacement mémoire prévu à l'assemblage. Les autres assembleurs afficheront une erreur de saut relatif trop long.
JR C,unLabel ; saute si retenue (C flag = 1)
JR NC,unLabel ; saute si pas de retenue (C flag = 0)
JR Z,unLabel ; saute si zéro (Z flag = 1)
JR NZ,unLabel ; saute si non zéro (Z flag = 0)
|
- Il existe une version non conditionnelle de ce saut
- Le saut relatif présente l'intérêt d'avoir un micro-code plus compact (2 octets au lieu de 3 pour JP) et de pouvoir charger le programme qui n'utilise que des sauts relatifs, n'importe où en mémoire.
JP
Cette instruction permet d'effectuer un saut absolu dans l'espace d'adressage 16 bits. On peut donner en argument un label ou des trois registres suivants: HL,IX,IY
JP C,unLabel ; saute si retenue (C flag = 1)
JP NC,unLabel ; saute si pas de retenue (C flag = 0)
JP Z,unLabel ; saute si zéro (Z flag = 1)
JP NZ,unLabel ; saute si non zéro (Z flag = 0)
JP M,unLabel ; saute si signé (S flag = 1 ou Minus)
JP P,unLabel ; saute si non signé (S flag = 0 ou Positive)
JP PE,unLabel ; saute si (P/V flag = 1)
JP PO,unLabel ; saute si (P/V flag = 0)
|
- Il existe des versions non conditionnelles du saut JP label
- Avec l'utilisation de saut absolu, l'adresse de chargement et d'exécution d'un programme ne peut pas être modifiée.
DJNZ
DJNZ unLabel ; décrémente B et saute si B est différent de zéro (ne modifie pas les flags)
|
- Comme pour l'instruction JR, le déplacement de l'instruction DJNZ est signé sur 8 bits. C'est donc un saut relatif limité dans l'espace mémoire.
RET
L'instruction RET (abréviation de return) effectue un saut à l'adresse lue et retirée du haut de la pile. L'adresse aura été placée auparavant sur la pile typiquement par une instruction d'appel à une sous-routine.
RET C,unLabel ; retourne si retenue (C flag = 1)
RET NC,unLabel ; retourne si pas de retenue (C flag = 0)
RET Z,unLabel ; retourne si zéro (Z flag = 1)
RET NZ,unLabel ; retourne si non zéro (Z flag = 0)
RET M,unLabel ; retourne si signé (S flag = 1 ou Minus)
RET P,unLabel ; retourne si non signé (S flag = 0 ou Positive)
RET PE,unLabel ; retourne si (P/V flag = 1)
RET PO,unLabel ; retourne si (P/V flag = 0)
|
- Il existe une version non conditionnelle de ce saut
Sauts conditionnels avec retour
CALL
Cette instruction effectue un saut absolu dans l'espace d'adressage 16 bits. L'adresse de l'instruction suivante est enregistrée dans la pile. Ainsi le programme appelant peut revenir où il en était avec un RET.
CALL C,unLabel ; saute si retenue (C flag = 1)
CALL NC,unLabel ; saute si pas de retenue (C flag = 0)
CALL Z,unLabel ; saute si zéro (Z flag = 1)
CALL NZ,unLabel ; saute si non zéro (Z flag = 0)
CALL M,unLabel ; saute si signé (S flag = 1 ou Minus)
CALL P,unLabel ; saute si non signé (S flag = 0 ou Positive)
CALL PE,unLabel ; saute si (P/V flag = 1)
CALL PO,unLabel ; saute si (P/V flag = 0)
|
- Il existe une version non conditionnelle de ce saut
RST #38
Note : Les instructions suivantes sont un hack d'opcode (supporté par Rasm).
RST C,#38 ; saute en #38 si retenue (C flag = 1)
RST NC,#38 ; saute en #38 si pas de retenue (C flag = 0)
RST Z,#38 ; saute en #38 si zéro (Z flag = 1)
RST NZ,#38 ; saute en #38 si non zéro (Z flag = 0)
|
- Il existe des versions non conditionnelles de ce saut pour les adresses #00, #08, #10, #18, #20, #28, #30 et #38
- L'instruction RST est essentiellement utilisée pour des appels systèmes, celui-ci étant généralement situé en début de mémoire.
- L'instruction RST conditionnelle est plus compacte et plus rapide qu'un CALL condition,#38