Flux rss
Collection CommentÇaMarche.net
Bookmark Ajouter aux favoris / Partager
On appelle saut (ou branchement) en assembleur le fait de passer à une instruction autre que celle qui suit celle en cours en mémoire. En effet, en temps normal (c'est-à-dire sans instruction contraire) le processeur exécute les instructions séquentiellement, il exécute l'instruction située à l'emplacement mémoire suivant. C'est un registre spécial (le registre IP) qui indique l'adresse de l'instruction suivante à exécuter.

Dans certaines conditions il peut être intéressant de « choisir » la prochaine instruction à effectuer. Ce type de condition peut notamment se rencontrer dans les structures conditionnelles (saut si...) ou bien dans les structures de boucle (en effet dans le cas où on désire exécuter un grand nombre de fois une instruction il peut être intéressant d'utiliser une instruction de branchement, qui indique au processeur l'adresse de la prochaine instruction à exécuter au lieu de gaspiller la mémoire en stockant plusieurs fois la même instruction en mémoire).

Lors de l'exécution « normale » d'un programme, le processeur lit l'adresse contenue dans le registre IP, incrémente celui-ci pour qu'il pointe vers l'instruction suivante, puis exécute l'instruction contenue à l'adresse qu'il vient de lire. Lorsqu'il rencontre une instruction de saut (ou branchement), celle-ci va lui faire modifier le contenu du registre IP pour qu'il pointe à l'adresse d'une autre instruction.

On distingue ces instructions de saut en deux catégories suivant que :

  • le saut est effectué quoi qu'il arrive (saut inconditionnel)
  • le saut est effectué ou non selon l'état d'un registre (saut conditionnel)

Saut inconditionnel

L'instruction JMP permet d'effectuer un saut inconditionnel, c'est-à-dire que cette instruction va stocker dans le registre IP l'adresse de l'instruction que l'on veut exécuter. L'opérande de cette instruction (le paramètre) est donc l'adresse de l'instruction à laquelle on veut sauter. Une fois l'instruction de branchement exécutée le processeur lit le contenu du registre IP et saute donc directement à l'adresse de l'instruction que l'on vient de définir !
La taille de l'instruction JMP est de 1 bit.

On appelle déplacement (en anglais offset) le nombre d'octets (car il s'agit d'un nombre entier relatif codé sur 8 bits) qui séparent l'instruction suivante de l'instruction visée. Voyons cela sur le programme suivant :

Adresse Instruction en assembleur Commentaire
0100 MOV AX, [120] copie le contenu de la case mémoire à l'adresse 0120H dans le registre AX
0103 JMP 0100H saute à l'adresse 0100H
0104 MOV [120], BX instruction non exécutée à cause du saut précédent...
La valeur du déplacement est ici de: 0100H - 0104H = -4

Saut conditionnel

Les instructions de saut conditionnel permettent d'effectuer un saut suivant une condition. Si celle-ci est réalisée le processeur saute à l'instruction demandée, dans le cas contraire il ignore cette instruction et passe automatiquement à l'instruction d'après, comme si cette instruction n'existait pas...

Les conditions pour chacune de ces instructions sont fonction de l'état des registres spécifiques appelés indicateurs (en anglais flag, ce qui signifie drapeau).

Les indicateurs

Les indicateurs sont des registres dont l'état est fixé par l'UAL après certaines opérations. Les indicateurs font partie de ce que l'on appelle le registre d'état qui n'est pas directement accessible par les autres instructions, seules des instructions spécifiques permettent de les manipuler. Voyons certains de ces indicateurs :

  • CF (Carry Flag) : c'est l'indicateur de retenue.
    Il intervient lorsqu'il y a une retenue après une addition ou une soustraction entre des entiers naturels. Lorsqu'il y a une retenue il est positionné à 1, dans le cas contraire à 0.
  • OF (Overflow Flag) : cet indicateur (indicateur de débordement : overflow = débordement) intervient lorsqu'il y a un débordement, c'est-à-dire lorsque le nombre de bits sur lesquels les nombres sont codés n'est pas suffisant et que le résultat d'une opération n'est pas codable avec le nombre de bits spécifiés (il peut par exemple arriver dans ces conditions que la somme de deux nombres positifs donne un nombre négatif). Dans ce cas l'indicateur OF est positionné à 1.
  • SF (Sign Flag) : c'est l'indicateur de signe. SF donne tout simplement le signe du bit de poids fort. Or, le bit de poids fort donne le signe du nombre (1 si le signe est négatif, 0 s'il est positif). Il simplifie le test du signe d'un entier relatif.
  • ZF (Zero Flag) : l'indicateur de zéro permet de savoir si le résultat de la dernière opération était nul. En effet, dans ce cas, l'indicateur ZF est positionné à 1 (0 dans le cas contraire). Il permet notamment de déterminer si deux valeurs sont égales, en effectuant leur soustraction, puis en observant l'état de l'indicateur de zéro.
Voyons les états de ces indicateurs sur un exemple :
  0 1 1 0
+ 0 1 0 1
  - - - -
  1 0 1 1
  • OF=1 (la somme de deux nombres positifs est négative)
  • ZF=0 (le résultat 1011 n'est pas nul)
  • SF=1 (le signe du résultat est négatif)
  • CF=0 (il n'y a pas de retenue)

Forcer l'état de certains indicateurs

Les instructions STC et CLC permettent de positionner « manuellement » l'indicateur de retenue (CF).
L'instruction STC (SeT Carry) positionne l'indicateur CF à 1.
L'instruction CLC (CLear Carry) positionne CF à 0.

Instruction de comparaison

L'instruction CMP permet de tester la valeur d'un registre (AX) avec une autre valeur. Sa seule action est de positionner l'indicateur ZF à 1 en cas d'égalité, ou plus exactement lorsque la soustraction des deux valeurs donne un résultat nul. En ce sens il effectue la même chose que SUB à la seule différence près qu'il ne modifie pas les opérandes.

Par exemple, l'instruction :
CMP AX, 2
positionne à 1 l'indicateur ZF si la valeur contenue dans le registre AX vaut 2, dans le cas contraire il le met à zéro...

Les sauts conditionnels

Les branchements conditionnels (ou sauts conditionnels) permettent au processeur de traiter l'instruction située à un emplacement mémoire indiqué si une certaine condition est vérifiée. Dans le cas contraire (condition non réalisée), le processeur ignorera cette instruction, il traitera donc l'instruction suivante.

La (ou les) condition(s) à satisfaire dépend(ent) de l'état d'indicateurs. Ainsi les branchements conditionnels doivent généralement être placés après une opération qui va modifier l'état d'un ou plusieurs indicateurs (une instruction CMP ou autre).

Selon l'intitulé de l'instruction, les conditions à satisfaire sont différentes :

  • JA (Jump if above, ce qui signifie saute si au-delà)
    effectue un saut si ZF=0 et CF=0
  • JB (Jump if Below, ce qui signifie saute si en deçà)
    effectue un saut si CF=1
  • JBE (Jump if Below or Equal, ce qui signifie saute si en deçà ou égal)
    effectue un saut si ZF=1 ou CF=1
  • JE (Jump if Equal, ce qui signifie saute si égalité)
    effectue un saut si ZF=1
  • JG (Jump if Greater, ce qui signifie saute si supérieur)
    effectue un saut si ZF=0 et SF=OF
  • JLE (Jump if Lower or Equal, ce qui signifie saute si inférieur ou égal)
    effectue un saut si ZF=1 ou SF différent de OF
  • JNE (Jump if Not Equal, ce qui signifie saute si non-égalité)
    effectue un saut si ZF=0


Dernière modification le mardi 14 octobre 2008 à 17:40:29.Ce document intitulé « Branchements en assembleur » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Bouton de démarrage -branchements electriques Bonjour, Je suis en train d'assembler mon PC. J'ai récupéré le boitier de mon ancien PC pour faire cela. Le prolème vient des connecteurs pour les branchements électriques (LED disque dur, bouton reset, bouton de démarrage.) En effet sur mon ancien... www.commentcamarche.net/forum/affich-2031105-bouton-de-demarrage-branchements-electriques
Assembler un PC De l'assemblage d'un ordinateur Un ordinateur de type PC est modulaire, c'est-à-dire qu'il peut être monté en assemblant des éléments matériels de différents constructeurs, afin d'obtenir un ordinateur conforme à ses besoins. Les éléments... www.commentcamarche.net/contents/assemblage/monter.php3
Introduction à l'assembleur Les prérequis nécessaires Le langage assembleur est très proche du langage machine (c'est-à-dire le langage qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il... www.commentcamarche.net/contents/asm/assembleur.php3
[Vidéo] Branchement PC-TVIl est relativement simple de relier le PC à la télévision. Branchement Paramétrage Notes Branchement Il faut tout d'abord relier les appareils via un câble S-vidéo du PC à la télévision, puis le son c'est-à-dire la sortie des écouteurs... www.commentcamarche.net/faq/sujet-3018-video-branchement-pc-tv
[Photofiltre]Réaliser un assemblage de 2 imagesPhotofiltre est un logiciel de retouche d'image. Cette astuce fonctionne aussi bien avec Photofiltre qu'avec Photofiltre Studio Dans ce cas précis, Photofiltre va permettre d'assembler un collage c'est-à-dire de coller une deuxième image (en... www.commentcamarche.net/faq/sujet-7719-photofiltre-realiser-un-assemblage-de-2-images
Compiler un programme assembleur avec NasmAvec Linux Etape 1. Créer un fichier source Etape 2. Assembler le fichier source Etape 3. Création de l'executable Etape 4. Execution du programme Avec windows Etape 1. Installer les logiciels nécessaires Etape 2. Créer un fichier... www.commentcamarche.net/faq/sujet-9836-compiler-un-programme-assembleur-avec-nasm
Branchement filtre adsl passif "speedtouch (Résolu)Bonjour à tous, je viens de m'abonner à l'adsl et j'ai un petit souci avec mon modem qui est apparement désynchronisé à cause d'une alarme de télésurveillance. J'ai acheté un filtre passif speedtouch, le branchement ne semble pas compliqué sauf que je... www.commentcamarche.net/forum/affich-1084824-branchement-filtre-adsl-passif-speedtouch
Nouveau PC via un assembleur : bug écran bleu (Résolu)Bonjour à tous; je viens de faire monter par un assembleur un super PC sur mesure( 1400€)...mais ...qui ne fonctionne pas ! En effet , il a fonctionné quelques minutes , j'y ai installé Norton et un CPL et il s'est arrêté tout seul lors de l'ouverture... www.commentcamarche.net/forum/affich-2450909-nouveau-pc-via-un-assembleur-bug-ecran-bleu
Branchement télé/hifi avec freebox (Résolu)Bonjour, je cherche a faire le branchement de ma télé (je regarde les chaines avec la freebox boitier noir)avec ma chaine hifi afin d'avoir le son des chaines sur les enceintes hifi.J'ai utilisé le matériel que j'avais sous la main soit un cable... www.commentcamarche.net/forum/affich-6894609-branchement-tele-hifi-avec-freebox
50 ans d'archives de l'Assemblée nationale sur Internet(Paris - Relax news) - A l'occasion du 50ème anniversaire de la première séance de la première législature de la Ve République, qui s'est tenue le 9 décembre 1958, l'Assemblée nationale met en ligne tous les comptes rendus de séance de ces cinquante... www.commentcamarche.net/actualites/50-ans-d-archives-de-l-assemblee-nationale-sur-internet-5847949-actualite.php3
Liste des instructions en assembleurTableau des principales instructions en assembleur Voici une liste (non exhaustive) des principales instructions en assembleur des processeurs 80x86, ainsi que du code machine qui leur est associé et de leur taille en mémoire. Les valeurs val et... www.commentcamarche.net/contents/asm/liste.php3
Les procédures en assembleurLa notion de procédure En langage assembleur, on appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la procédure. Cette notion de sous-programme est généralement appelée fonction dans d'autres... www.commentcamarche.net/contents/asm/procedure.php3