Une instruction informatique est une étape dans un programme informatique. Une instruction ordonne à l'ordinateur l'action qu'il doit traiter avant de passer à l'instruction suivante. Un programme informatique est constitué d'une suite d'instructions.

Contexte théorique

Contrairement à un calculateur, dont le rôle se limite à réaliser des opérations de calcul (le plus souvent arithmétiques), un ordinateur assure des opérations de traitement de l'information, c'est-à-dire qu'il exécute successivement des opérations en suivant les directives d'un algorithme. Ce traitement est mené à l'aide d'instructions plus ou moins sophistiquées, et plus ou moins proches du microprocesseur.

Par instruction informatique on entend donc décrire une commande unique, représentée par un symbole (numérique ou alphanumérique, dit mnémoniques), et dont la finalité est prédéfinie : de la plus simple (déplacer l'index du microprocesseur dans la mémoire, additionner deux nombres) à la plus sophistiquée et abstraite (par exemple les instructions de gestion de classes du langage Java).

Historiquement, cette particularité de l'ordinateur qui conduit des traitements en exécutant successivement des instructions est directement reliée au principe de la machine de Turing créé par Alan Turing pour donner une définition précise au concept d'algorithmePage de Wolfram Research sur les Machines de Turing avec Bibliographie complémentaire. Cette machine est un modèle abstrait d'un appareil mécanique de calcul auquel on aurait rajouté un ruban (de la mémoire) et une tête de lecture (le processeur) susceptible de mener des traitements d'après des symboles interprétés par la table des actions (les instructions). Le concept de machine de Turing original était censé représenter une mécanique imaginaire exécutant une procédure. C'est John von Neumann qui s'est chargé de transformer le travail théorique de Turing en une machine fonctionnelle en définissant une architecture dite de von Neuman.

Les instructions dans l'architecture de von Neumann

Telle que définie, la machine de Turing ne décrit pas précisément ce que pourrait être une instruction ni un algorithme. Elle se limite à une définition abstraite. Une « table d'actions » indique à la « tête de lecture/écriture » de la machine, en fonction de son état courant, quel symbole écrire, et comment se déplacer lors de la prochaine action. Le nouvel état est défini en fonction du symbole lu sur le ruban et de l'état courant de la machine.

Dans un programme s'exécutant sur un ordinateur, on pourrait considérer que la tête de lecture correspond à l'action de lecture par le processeur d'un symbole contenu dans la mémoire, que ce symbole correspond à une action précise (additionner, avancer, etc), qui conduira une fois accomplie à la lecture du symbole suivant et ainsi de suite.

Ce concept de symbole sur un ruban correspond très précisément à l'idée d'instruction informatique contenue dans une mémoire. Et la « table d'actions » de la machine de turing peut être considérée comme correspondant au cœur du microprocesseur et à l'ensemble des actions (on peut parler de jeu d'instruction ou de langage) qu'il est en mesure de réaliser pour chaque instruction donnée.

Type d'instructions Une instruction informatique est incluse dans un jeu d'instructions qui composent le langage de programmation. La forme et la puissance de ce jeu d'instructions est influencée par l'architecture qui va la faire fonctionner. Elle est également contrainte par son degré d'abstraction par rapport au micro-processeur. Les instructions informatiques sont en effet plus ou moins proches de ce dernier : du langage machine, directement compris par le micro-processeur, aux langages évolués, eux-mêmes composés d'instructions interprétées ou transformées dans un langage de plus bas niveau tel que le langage machine, puis transmises au micro-processeur via des dispositifs matériels et logiciels intermédiaires plus ou moins nombreuxLa technique informatique: Principes généraux et programmation..

Instructions en langage machine

Le langage machine est la suite de bits qui est interprétée par le processeur d'un ordinateur exécutant un programme informatique. Ce langage directement compris par un processeur est composé d'instructions à traiter codées sous une forme binaire. Pour leur intelligibilité ces instructions sont symboliquement représentées par un vocabulaire, compréhensible par les humains, intitulé assembleur ou langage assembleur Documentation de MASM, assembleur Microsoft .

Par exemple, un microprocesseur de la famille x86 d'Intel reconnaît une instruction stockée dans une de ses mémoires sous la forme binaire : 10110000 01100001 Et en langage assembleur, cette instruction est représentée par un équivalent intelligible pour le programmeur : movb $0x61,%al

Le langage machine est le groupe d'instructions élémentaires qui permet de donner des ordres au microprocesseur.

Tout logiciel, y compris les langages de programmation évolués, qui fonctionne sur un ordinateur, voit en dernier recours ses ordres exécutés par le micro-processeur via des instructions de la famille du langage machine, et stockées sous une forme binaire.

Instructions du langage évolué Il existe de nombreux niveaux d'abstractions qui permettent de mettre en œuvre des instructions plus ou moins éloignées de celles directement compréhensibles par le micro-processeur, les instructions en langage machine. Les langages dits évolués, c'est-à-dire qui proposent des instructions qui doivent faire l'objet d'étape intermédiaire d'interprétation avant d'être comprises et exécutées par le processeur, peuvent pratiquement proposer n'importe quelle instruction, d'un niveau de complexité sans limite.

Ces instructions de langages évoluées peuvent être très spécialisées : le langage R par exemple, dédié aux programmations de modèles statistiques, propose des instructions qui vont de la statistique multivariée aux méthodes de ré-échantillonnage, de l'économétrie à la biométrie, des modèles de régression sur séries chronologiques ou les modèles à équations simultanées.

Des langages de programmation sophistiqués tels que Java ou C possèdent des instructions classiques dédiées au traitement de données, à la gestion des conditions et aux calculs arithmétiques, mais aussi des instructions particulièrement complexes capables de manipuler une base de données, ou un écran graphique.

Familles d'instructions Les instructions sont chargées de réaliser des traitements plus ou moins complexes. S'inscrivant dans le cadre théoriques des machines de Turing et de l'architecture de von Neumann, l'action des instructions est en premier lieu conditionnée par des besoins en relation avec l'algorithmique et l'architecture de l'ordinateur.

La plus simple des instructions est l'instruction nulle qui, comme son nom l'indique, ne commande l'exécution d'aucun traitement et n'existe que pour des raisons pratiques particulières.

Les familles d'instruction s'inscrivant dans le cadre algorithmique de la machine de Turing comprennent notamment des commandes de gestion des conditions (réaliser une action si une condition est remplie), de traitement (appliquer une transformation à une information - par exemple une valeur contenue en mémoire) ou encore de répétition et de branchement (passer d'un endroit à un autre du programme ou répéter plusieurs fois une même portion de programme).

Les instructions de nature algorithmique se retrouvent dans tous les microprocesseurs. Dans les plus évolués elles peuvent être très sophistiquées et traiter des opérations arithmétiques complexes, des calculs en virgule flottante avec un degré variable de précision, le cas échéant simultanément.

Les langages informatiques de haut niveau et spécialisés peuvent également offrir des instructions sophistiquées réalisant par exemple l'intégralité du calcul d'une fonction ou l'affichage d'une image en trois dimensions.

Les familles instructions concernées par l'aspect fonctionnel lié à la structure de l'ordinateur doivent assurer la gestion des échanges entre mémoires et entre registres, ainsi que la communication avec l'extérieur du micro-processeur, et notamment vers les dispositifs d'entrée-sortie (qui permettent d'écrire et de lire des données sur un disque dur ou une mémoire USB par exemple). Dans les ordinateurs les plus évolués les instructions liées au fonctionnement peuvent prendre en charge des opérations sophistiquées telles que la manipulation de mémoire à haute vitesse (comme dans les processeurs de cartes graphiques) ou tout ou partie de la gestion d'un échange de données (réseau, ports de communication).

Traitement et représentation des instructions Les anciennes cartes perforées (équivalentes des mémoires) contenaient les instructions informatiques sous une forme proche du binaire du langage machine. ce mode de stockage était également en vigueur pour les premiers langages évolués (tels que le Fortran ou le Cobol). De manière générale, une instruction est toujours stockée sous une forme codée. Néanmoins, sur les systèmes informatiques modernes, par souci d'intelligibilité et de compréhension, les instructions sont toujours présentées à l'utilisateur sous une forme symbolique alphanumérique et mnémonique.

Il n'en demeure pas moins que le micro-processeur ne comprend que les instructions du langage machine, ce qui signifie qu'avant d’être transmise au microprocesseur en vue de son exécution, l'instruction doit subir un processus de transformation de sa forme symbolique intelligible vers une forme codée binaire.

Implémentation du jeu d'instructions dans un processeur

Au niveau matériel de l'ordinateur, le jeu d'instructions composé des instructions machines constitue l'ensemble des opérations élémentaires qu'un programme peut demander à un processeur de traiter. C'est l'ordre le plus simple que peut comprendre et exécuter un processeur d'ordinateur en utilisant l'ensemble des circuits logiques qui sont physiquement implémentées dans le processeur. Ces circuits permettent d'effectuer des opérations élémentaires (addition, ET logique) ou plus complexes (division, passage en mode basse consommation)Intel® 64 and IA-32 Architectures Software Developer’s Manual ..

Architecture CISC Un processeur à jeu d'instructions étendu () est un microprocesseur qui implémente un jeu d'instructions comprenant de très nombreuses instructions mixées à des modes d'adressage complexes. L'architecture CISC est opposée à l'architecture RISC (Reduced Instruction Set Computer). La plupart des microprocesseurs prévus pour les serveurs ou les stations de bureau implémentent un jeu d'instructions CISCRisc vs Cisc architectures, Article arxiv par Farhat Masood, National University of Sciences and Technology (NUST).

Architecture RISC Un processeur à jeu d'instructions réduit ( Description du RISC, Crystal Chen, Greg Novick and Kirk Shimano, cours Sophomore College 2000 : RISC en anglais) est un type d'architecture matérielle de microprocesseurs qui se caractérise par un jeu d'instructions réduit, facile à décoder et comportant uniquement des instructions simples.

Le code informatique écrit avec des instructions RISC est généralement moins compact, puisque toutes les instructions sont de même taille, alors que les instructions les plus utilisées sont plus courtes dans un jeu d'instruction CISC. Les appareils portables modernes (tels que les IPad ou les smartphones) utilisent très souvent des processeurs RISC de type ARMARM ARM1156T2F-S architecture with Thumb-2 core technolog..

Cycles d'exécution

droite|vignette|Diagramme fonctionnel d'un processeur simple exécutant une instruction