Composition générale d’une instruction

Cours composition générale d’une instruction, tutoriel & guide de travaux pratiques en pdf.

Qu’est-ce qu’une instruction ?

Une instruction est une suite d’octets contenue dans un fichier exécutable. Le processeur lit chaque instruction et l’exécute, changeant ainsi d’état à chacune d’entre elles.
Le but de ce document traitant avant tout de la manière dont sont constituées les instructions et comment on peut décoder celles-ci, les changements d’états du processeur ne seront pas traités.
Les processeurs de la famille x86 sont des processeurs à technologie CISC (complex instruction set computer) ce qui sous-entend que ces processeurs possèdent de nombreuses instructions, aptes à faire chacune des opérations complexes. Chacune de ces opérations prend plus ou moins de temps pour s’exécuter suivant sa complexité.
L’architecture CISC est le contraire de l’architecture RISC (R pour « Reduced ») qui ne comporte qu’un nombre réduit d’instructions, chacune d’entre elles ne faisant qu’une opération primaire. Toutes les instructions d’un processeur RISC mettent le même temps à s’exécuter.
À titre d’information, les derniers nés des processeurs x86 comportent environ 1000 instructions.
Mais comment sait-on que tel octet (par exemple 0x90) correspond à telle instruction (NOP dans notre exemple) ?
Pour répondre à cette question, les fondeurs de processeurs mettent à notre disposition une « opcode map » (carte des opcodes) qui est un gros tableau où chaque instruction est dûment référencée. Il suffit alors d’y retrouver le numéro d’opcode et d’y lire le mnémonique s’y rapportant (on notera dans un premier temps que tous les octets de la carte des opcodes ne référencent pas forcément une instruction).
Mais le travail de décomposition d’une instruction est cependant beaucoup plus complexe que cela et ne s’arrête pas à la simple lecture d’un tableau…

Composition générale d’une instruction

Une instruction d’un processeur x86 obéit à des règles strictes, sans quoi le processeur ne saurait exécuter celle-ci convenablement. La taille minimale d’une instruction est de 1 octet, tandis que sa taille maximale est de 15 octets.

Legacy Prefix

Les « legacy prefixes » (préfixes d’héritage) sont nommés comme tels en mode 64 bits. Dans les autres modes on les nomme tout simplement « prefixes ».
Les préfixes sont des octets particuliers et ne peuvent pas être confondus avec d’autres octets (comme ceux d’une instruction). Nous verrons spécifiquement chaque octet de préfixe séparément.
Le rôle des préfixes est d’influer d’une certaine manière (différente suivant le préfixe mis en jeu) sur l’instruction qu’ils précèdent. Voilà les règles de base concernant les préfixes :
– Les préfixes ont tous une taille d’un octet. – L’octet de préfixe, s’il est présent, est le premier à composer à l’instruction. – Il peut y avoir de 0 à 4 préfixes.
Les préfixes étant divisés en 4 groupes différents, ils doivent aussi respecter la règle suivante :
– Il ne peut y avoir qu’un seul préfixe appartenant à un groupe spécifique.
Les préfixes supplémentaires (plus de 4 préfixes pour une instruction) sont simplement ignorés et dans le cas où 2 ou plusieurs préfixes d’un même groupe seraient présents, le résultat de l’instruction est dit « indéterminé ».
Notons finalement que l’ordre dans lequel sont placés les préfixes n’a pas d’importance. Il arrive aussi qu’une instruction ne nécessite aucun préfixe ou que les préfixes qui lui soient ajoutés n’aient aucune influence sur l’instruction. Dans ce cas là les préfixes sont dits superflus et sont tout simplement ignorés par le processeur.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *