Grande Encyclopédie Larousse 1971-1976Éd. 1971-1976
O

ordinateur (suite)

Les modifications d’adresse

Pour tenir compte d’impératifs dus à la programmation, le contenu d’une zone-adresse n’est généralement pas directement l’adresse de l’opérande, mais une information permettant de calculer cette adresse. Un ensemble de bits formant la condition d’adressage détermine le traitement précis à lui faire subir. À titre d’exemple, ce peut être l’addition du contenu de la zone-adresse avec le contenu d’un registre appelé registre de base ou d’index suivant sa fonction précise.

L’adressage par base et déplacement permet d’adresser un ensemble contigu de données sans savoir à l’avance où il sera implanté en mémoire : la zone-adresse de l’instruction contient le numéro d’ordre de la donnée dans l’ensemble (ou déplacement), tandis que le registre de base contient l’adresse de la première donnée de l’ensemble. Cela résout notamment le problème du partage de données entre plusieurs programmes.

L’indexation permet d’utiliser une même instruction, sur laquelle on repasse cycliquement pour traiter les différents éléments d’un tableau de données rangés à la suite les uns des autres en mémoire. Il suffit, pour cela, que le contenu du registre d’index, représentant le numéro d’ordre de l’élément, soit augmenté de 1 entre chaque passage grâce à une instruction spéciale.


Les instructions de rupture de séquence

Les instructions exécutées au niveau de l’unité d’instruction sont celles qui modifient soit le contenu d’un des registres d’adressage (registre de base en index), soit celui du compteur d’instructions. Dans ce dernier cas, il s’agit d’instructions de branchement. Ces dernières sont souvent conditionnelles : si la condition, portant généralement sur le résultat de l’instruction précédente (résultat = 0, > 0,  0, ... égalité de deux chaînes de caractères alphabétiques, ...) ou encore sur le contenu d’un registre d’index, est réalisée, il y a branchement à l’adresse explicitement mentionnée dans l’instruction, sinon, il y a passage normal en séquence par incrémentation du compteur d’instructions.


L’unité arithmétique et logique

Elle exécute sur les données des opérations de type arithmétique ou de type logique (opérations de l’algèbre de Boole, décalages, etc.). Aussi comporte-t-elle les opérateurs correspondants.

Les petites machines possèdent généralement un seul opérateur, construit autour d’un additionneur qui, selon les aiguillages positionnés par l’unité de commande après analyse de l’instruction, exécute l’une des opérations élémentaires dont il est doté (ET, OU, complémentation, décalage à droite ou à gauche, addition, soustraction). Les opérations plus complexes, multiplications ou divisions, sont réalisées par des sous-programmes fournis dans le logiciel de base. L’opérateur sert également au calcul d’adresse, ce qui économise un additionneur dans l’unité d’instruction.

Les machines scientifiques plus puissantes possèdent pour le calcul scientifique soit un bloc de calcul plus évolué, soit plusieurs opérateurs spécialisés (opérateur de logique et d’arithmétique fixe, opérateur d’addition-soustraction en virgule flottante, opérateur de multiplication-division en virgule flottante). Des registres permettent de conserver au niveau de l’unité centrale des résultats intermédiaires. Généralement, les opérations s’exécutent entre registres ou entre un registre servant d’accumulateur et une cellule-mémoire contenant le deuxième opérande.

Les opérations de gestion (arithmétique décimale sur des chaînes de chiffres décimaux, comparaison de chaînes de caractères alphanumériques) sont généralement exécutées caractère par caractère à partir d’opérandes en mémoire. Ainsi, pour l’addition décimale, l’instruction définit les adresses des derniers caractères des chaînes opérandes ; ceux-ci sont acheminés vers l’opérateur décimal, qui les additionne en conservant l’éventuelle retenue ; le résultat est rangé en mémoire ; le même processus se reproduit pour les autres caractères, mais en tenant compte de la retenue due à l’addition précédente ; l’opération s’arrête lorsqu’on atteint le bout de chaîne ; la machine en est prévenue, soit que l’instruction comporte des indications de longueur de chaîne, soit que les chaînes débutent par un caractère portant une marque de bout de chaîne.

Aux opérateurs arithmétiques sont associés des indicateurs permettant de conserver des informations concernant le résultat de la dernière opération réalisée. Ce sont ces indicateurs qui sont testés lors des instructions de branchement conditionnel.


L’unité de commande

L’unité de commande (ou séquenceur) orchestre le fonctionnement de l’ordinateur. Elle génère et distribue les signaux qui commandent et positionnent les différents organes du chemin des données. Ces signaux, appelés microcommandes, doivent être produits selon un diagramme des temps précis correspondant à la durée des micro-opérations composant l’instruction.


Le séquenceur

Le séquenceur peut être conçu comme un automate fini dont l’état interne dépend du code-opération et des conditions d’adressage de l’instruction en cours, d’indicateurs définissant l’état des différents organes de la machine, enfin de la phase dans laquelle se trouve l’instruction. Généralement, il est cadencé par une horloge qui fournit des tops régulièrement espacés, sur lesquels sont synchronisés les microcommandes ainsi que les changements de phase. Les relations booléennes liant chaque microcommande aux composantes des états internes du séquenceur sont appelées équations logiques de l’ordinateur.


La microprogrammation

L’introduction du logiciel dans la réalisation de l’unité de commande conduit aux techniques de microprogrammation. Chaque instruction est alors interprétée par le déroulement d’un microprogramme qui lui est propre. Les microprogrammes sont stockés dans une mémoire rapide spécialisée (généralement de 2 à 4 fois plus rapide que la mémoire centrale) et exécutés micro-instruction après micro-instruction, chaque micro-instruction générant directement les microcommandes associées à une phase de l’instruction. Bon compromis entre les performances du matériel et la souplesse du logiciel, la microprogrammation ouvre en effet de multiples horizons : remplacement de sous-programmes usuels par des super-instructions beaucoup plus performantes, jeu d’instructions variable en fonction de l’application, instructions très évoluées sur des petites machines économiques permettant la réalisation de gammes de machines compatibles (c’est-à-dire admettant strictement le même langage de la plus économique à la plus puissante), interprétation efficace du code d’une machine donnée sur une machine de conception différente, etc.