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 :
Saut inconditionnel.
Le saut réalisé par l'instruction codice_1 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 ; Offset (near pointer : adresse proche)
JMP FFFF:0000 ; Segment:offset (far pointer : adresse lointaine)
JMP [BX] ; Offset contenu dans le mot de 16 bits pointé par DS:BX
es:
JMP [BX] ; Offset contenu dans le mot de 16 bits pointé par ES:BX
JMP far ptr [BX] ; Segment:offset contenu dans les deux mots de 16 bits pointés par BX (BX pour l'offset, BX+2 pour le segment)
Saut conditionnel.
Les instructions de saut conditionnel n'effectue le saut que si la condition correspondante est réalisée.
Comme pour l'instruction codice_1, 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 codice_1 qui utilise une adresse codée sur plus d'octets.
Comparaison puis saut(s).
En assembleur, les conditions if sont décomposées en deux instructions :
Cette décomposition permet d'optimiser certains cas :
cmp ax, bx ; Comparaison : indicateurs mis à jour selon AX-BX
jl quand_plus_petit ; saut si AX < BX (non signé)
jg quand_plus_grand ; saut si AX > BX (non signé)
call sys_open ; Appel à open(...)
jb open_failure ; saut si erreur
Sauts conditionnels.
La table ci-dessous résume les instructions de saut conditionnel :
Les deux dernières instructions de saut conditionnel codice_4 et codice_5 permettent de déterminer un bit de parité pour un octet.
Elles sont notamment utilisées lors de la communication par port série.
Sauts conditionnels pour comparaison numérique.
Les sauts conditionnels utilisables après la comparaison de deux nombres entiers varient selon que les nombres sont signés ou non-signés.
L'interprétation diffère quand le bit de poids fort des deux nombres diffèrent.
Le tableau suivant montre les sauts conditionnels à utiliser selon l'interprétation des nombres comparés en non-signés ou signés.
Appel à un sous-programme.
L'instruction codice_6 permet d'appeler un sous-programme.
Le seul paramètre de cette instruction est l'adresse du sous-programme à appeler.
Cette adresse peut être une constante, ou contenue dans un emplacement mémoire (un pointeur).
 CALL "adresse"
Exemples :
CALL 20E5 ; Offset (near pointer : adresse proche)
CALL 2AE1:0200 ; Segment:offset (far pointer : adresse lointaine)
CALL [BX] ; Offset contenu dans le mot de 16 bits pointé par DS:BX
es:
CALL [BX] ; Offset contenu dans le mot de 16 bits pointé par ES:BX
CALL far ptr [BX] ; Segment:offset contenu dans les deux mots de 16 bits pointés par BX (BX pour l'offset, BX+2 pour le segment)
L'instruction codice_6 est similaire à codice_1 excepté qu'avant d'effectuer le saut à l'adresse indiquée, l'adresse de retour est enregistrée dans la pile :
L'adresse de retour sauvegardée dans la pile est celle du premier octet de l'instruction qui suit l'instruction codice_6.
Le sous-programme doit se terminer par une instruction de retour pour restituer l'adresse sauvegardée dans les registres CS:IP :
Il existe aussi une instruction codice_12 ("Interruption Return") qui en plus restitue les indicateurs mais elle est utilisée plutôt en fin de routine de traitement des interruptions.

Programmation Assembleur/x86/Les flags
Les flags (ou indicateurs en français) sont des bits stockés dans un registre spécifique nommé codice_1, codice_2 ou codice_3. Chaque bit correspond à différents tests sur les derniers opérandes utilisés durant la dernière opération effectuée (opération arithmétique, comparaison, ...).
L'opération de comparaison de deux valeurs effectue une soustraction entre les deux opérandes sans stocker le résultat. Le positionnement des indicateurs donne le résultat de la comparaison.
Ces différents indicateurs ont tous un nom court de deux lettres dont la deuxième est F signifiant Flag.
Le registre F.
Le registre EFLAGS (extended flags) contient un mot de 32 bits qui sont les suivants :
 bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
 flag 0 0 0 0 0 0 0 0 0 0 ID VIP VIF AC VM RF
 bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 flag 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF
Le registre FLAGS correspond aux 16 bits de poids faibles du registre EFLAGS.
Le registre RFLAGS contient un double mot de 64 bits dont les 32 bits de poids faibles contiennent EFLAGS.
Zero Flag (ZF).
Cet indicateur est positionné à 1 si les deux opérandes utilisés sont égaux, sinon positionné à 0.
Son nom vient de la différence nulle entre les deux opérandes.
Overflow Flag (OF).
Cet indicateur est positionné à 1 si le dernier résultat a débordé de la taille du registre,sinon à 0 .
Cet indicateur est utilisé par les sauts conditionnels :
Quand cet indicateur est à 1, l'instruction codice_6 (INTerrupt if Overflow) appelle l'interruption 4 (débordement). S'il est à 0, l'instruction codice_6 ne fait rien.
Carry Flag (CF).
Cet indicateur est positionné à 1 si la dernière opération a générée une retenue (mode non signé),sinon à 0 .
Trois instructions permettent de modifier cet indicateur :
Cet indicateur est utilisé par les sauts conditionnels (JC, JNC, JB, JNB, ...).
Il est également pris en compte par les instructions arithmétiques suivantes :
Auxiliary carry Flag (AF).
Cet indicateur est positionné à 1 si la dernière opération a généré une retenue du bit numéro 3 vers le bit numéro 4, à 0 sinon.
Sign Flag (SF).
Cet indicateur est positionné à 1 si la dernière opération a généré un résultat négatif, à 0 s'il est positif ou nul.
Parity Flag (PF).
Cet indicateur est positionné à 1 si dans les 8 bits de poids faible du résultat de la dernière opération, le nombre de bits à 1 est pair, à 0 si ce nombre est impair.
Cet indicateur est utile pour la détermination du bit de parité pour la transmission octet par octet.
Interrupt Flag (IF).
Cet indicateur est positionné à 1 si les interruptions sont autorisées, à 0 sinon.
Deux instructions permettent de modifier cet indicateur :
Direction Flag (DF).
Cet indicateur est positionné à 1 si le transfert de données se fait en décrémentant les offsets, à 0 sinon (incrémentation des offsets).
Cet indicateur modifie le comportement des instructions de chaînes d'octets (STOS*, LODS*, CMPS*, SCAS*, MOVS*).
Deux instructions permettent de modifier cet indicateur :
Trap Flag (TF).
Cet indicateur est positionné à 1 pour exécuter les instructions en mode pas à pas.
Quand cet indicateur est activé, avant chaque instruction, le processeur appelle l'interruption 1 (INT 1).
Cette interruption est utilisée par les débogueurs quand le mode pas à pas est activé :
La routine de débogueur est alors exécutée après chaque instruction ce qui lui permet de :
Quand la condition d'interruption de l'exécution est d'atteindre une adresse particulière, une méthode plus efficace est de placer un point d'arrêt.
Accès au registre des indicateurs.
Les indicateurs sont utilisés par les instructions de saut conditionnels.
Il est possible d'accéder au registre des indicateurs de deux manières :
L'instruction non documentée codice_21 initialise le registre AL selon la valeur de l'indicateur de retenue (CF) en y stockant 0xFF si CF vaut 1, ou 0x00 sinon.