Aller au contenu

Programmation Assembleur/x86/Les branchements

Un livre de Wikilivres.
Programmation Assembleur/x86
Modifier ce modèle


Par défaut, les instructions sont exécutées les unes à la suite des autres, en séquence. Les instructions de branchement ou de saut permettent de passer à une autre instruction que la suivante, pour diverses raisons :

  • Effectuer une boucle, dans ce cas, le saut revient à une instruction antérieure,
  • Sauter les instructions conditionnelles quand la condition est fausse,
  • Appeler un sous-programme.

Saut inconditionnel

Le saut réalisé par l'instruction JMP est effectué sans test de condition. Le seul paramètre de cette instruction est l'adresse où l'exécution doit se poursuivre. Cette adresse peut être une constante, ou contenue dans un emplacement mémoire (un pointeur).

JMP adresse

Exemples :

JMP 20E5
JMP [BX]

Saut conditionnel

Les instructions de saut conditionnel n'effectue le saut que si la condition correspondante est réalisée. Comme pour l'instruction JMP, le seul paramètre est une adresse. Toutefois, sur les anciens processeurs, l'adresse ne peut aller au delà de 128 octets en arrière ou 127 octets en avant, car l'adresse n'est codée que sur un octet signé. Dans ce cas, l'astuce est de sauter à une instruction JMP qui utilise une adresse codée sur plus d'octets.

La table ci-dessous résume ces instructions :

Instruction et synonymes Signification (en anglais) Condition nécessaire
JCXZ Jump if CX is Zero Registre CX égal à 0
JZ

JE

Jump if Zero flag is set

Jump if both operand were Equals

Indicateur Zéro à 1

ou quand les deux opérandes A et B sont égaux (A-B = 0)

JNZ

JNE

Jump if No Zero flag set

Jump if both operand were Not Equals

Indicateur Zéro à 0

ou quand les deux opérandes A et B ne sont pas égaux (A-B != 0)