Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
3.3. Branchements conditionnels

Les instructions de saut conditionnel testent un ou plusieurs drapeaux du registre d'état et en fonction de leur valeur, effectuent le branchement ou passent à l'instruction suivante.

Syntaxe

La syntaxe de ces instructions est la même que pour la mnémonique jmp : il y a une seule opérande ; c'est l'adresse ou a lieu le branchement si la condition du branchement est remplie. Par exemple avec les drapeaux ZF , CF et OF que nous avons vus, nous pouvons utiliser les instructions suivantes :

  • jz : « jump if zero », c'est à dire « saut si résultat nul». Le branchement est effectué si ZF =1.

  • jnz : « jump not zero », c'est à dire « saut si résultat non nul ». Le branchement est effectué si ZF =0.

  • jc : « jump if carry », c'est à dire « saut si retenue ». Le branchement est effectué si CF =1.

  • jnc : « jump if not carry », c'est à dire « saut si pas de retenue ». Le branchement est effectué si CF =0.

  • jo : « jump if overflow », c'est à dire « saut si débordement ». Le branchement est effectué si OF =1.

  • jno : « jump if not overflow », c'est à dire « saut si pas de débordement ». Le branchement est effectué si OF =0.

Il est aisé de voir que ces 4 dernières instructions seront très utiles pour diriger le programme vers un traitement particulier lorsqu'un calcul rend un résultat invalide dans les entiers naturels ou relatifs.

Exemple

Par exemple :

Ce programme est une boucle qui va incrémenter le registre cx de 1 à chaque itération. On sortira de la boucle lorsque CF sera égal à 1, c'est à dire lorsque l'incrémentation de cx provoquera une retenue d'entier non-signé.

Remarque

Notons que toutes les structures de contrôle des langages évolués (if-then-else, while, for, repeat-until, do, case, etc.) peuvent être réalisées avec les seules instructions que vous avez vues jusqu'à maintenant.

Exemple

Par exemple, l'instruction pascal « if a>b then c:=a else c:=b; », a, b et c étant des variables globales entières non signées 64 bits, pourrait s'écrire :