![]()
| ||||||||||||||||||||||||||||||||||||||
L'assembleur - Branchements
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 :
Saut inconditionnelL'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 !
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 :
Saut conditionnelLes 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 indicateursLes 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 :
Forcer l'état de certains indicateursLes instructions STC et CLC permettent de positionner « manuellement » l'indicateur de retenue (CF).
Instruction de comparaisonL'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 :
Les sauts conditionnelsLes 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 :
|
||||||||||||||||||||||||||||||||||||||