web-dev-qa-db-fra.com

Comment un processeur "sait-il" ce que les commandes et les instructions signifient réellement?

Comment un processeur "sait-il" ce que signifient les différentes commandes?

Je pense aux commandes d'assemblage telles que MOV, Push, CALL, etc.

73
Simon Verbeke

Lorsqu'un ordinateur interprète des instructions de niveau Assemblage , celles-ci sont transformées en leurs équivalents binaires que le processeur peut lire. Lorsque la CPU exécute les instructions, elle interprète la partie code opération de l'instruction en "microprogrammes" individuels, contenant leurs équivalents microcode . Pour votre information, une instruction Assembly complète comprend un code opération et toutes les données applicables qui l’accompagnent, le cas échéant (par exemple, noms de registre, adresses de mémoire).

Les instructions de microcode sont extrêmement faibles (plus que Assembly) et contrôlent les signaux numériques réels qui contrôlent le flux de la logique dans le microprocesseur. Par exemple, une instruction de microcode peut mettre à jour un indicateur de registre de code de condition avec une nouvelle valeur ou connecter un registre de processeur avec l’une des unités ALU . Des tâches plus complexes sont possibles, mais cela vous donne une idée générale de à quoi sert le microcode.

Le flux général de la compilation à l'exécution est le suivant. Les instructions de montage sont assemblées (transformées en leurs équivalents binaires 0 et 1, ou désormais leurs signaux logiques). Ces signaux logiques sont à leur tour interprétés par la CPU et convertis en davantage de signaux logiques de bas niveau qui dirigent le flux de la CPU pour exécuter l'instruction particulière. Cela peut prendre un ou plusieurs cycles d'horloge, en fonction de l'architecture et du design du processeur (la plupart des manuels de référence du processeur vous indiquent le nombre de cycles d'horloge nécessaires pour exécuter une instruction particulière comme celle-ci par exemple ).

Tout cela est réalisé avec un microcode programmé en dur (physiquement intégré dans le processeur dans une sorte de ROM , défini lors de la fabrication), qui dirige le écoulement à travers les portes logiques réelles de bas niveau . Cela fournit une interface entre les instructions de montage abstraites et la logique électrique physique du processeur.


Donc, en résumé, les instructions du processeur sont assemblées et chargées par le processeur. Le processeur utilisera ensuite ces instructions pour rechercher le microprogramme (sous forme de microcode) correspondant à cette instruction particulière, qui est ce qui "exécute" en réalité l'instruction. Une fois que les microcodes de l'instruction particulière ont été exécutés (ce qui peut prendre un ou plusieurs cycles d'horloge), le processeur exécute le microcode pour extraire l'instruction suivante et le cycle se répète.

88
Breakthrough

Le processeur ne "sait" pas vraiment quelles sont les commandes. Les commandes ne sont que des modèles binaires qui obligent le processeur à faire ce que nous interprétons comme étant les commandes.

Par exemple, une opération ADD-R1-into-R2 fait que les valeurs des registres 1 et 2 atteignent l’ALU (unité arithmétique et logique), obligent l’ALU à utiliser la sortie de l’additionneur à la place des divers autres éléments, et sortie de l’ALU pour remplacer la valeur dans le registre 2. Il existe des circuits logiques simples pour réaliser toutes ces choses ( multiplexeur , additionneur , compteur , ...), bien que les vrais processeurs utilisent des optimisations très compliquées.

C'est un peu comme si vous demandiez comment une voiture sait ralentir lorsque vous appuyez sur les freins. La voiture ne le sait pas, il arrive que la pédale de frein contrôle indirectement la façon dont les plaquettes sont appuyées contre les roues.

37
Craig Gidney

Prenez, par exemple, l'instruction qui indique à un processeur x86/IA-32 de déplacer une valeur immédiate de 8 bits dans un registre. Le code binaire pour cette instruction est 10110 suivi d'un identifiant à 3 bits pour le registre à utiliser. L'identificateur du registre AL est 000; le code machine suivant charge donc le registre AL avec les données 01100001.

10110000 01100001

Ce code informatique binaire peut être rendu plus lisible par un humain en l’exprimant en hexadécimal comme suit

B0 61

Ici, B0 signifie "Déplacer une copie de la valeur suivante dans AL" et 61 est une représentation hexadécimale de la valeur 01100001, qui est 97 en décimal. Le langage d'assemblage d'Intel fournit le mnémonique MOV (une abréviation de move) pour des instructions telles que celle-ci, de sorte que le code machine ci-dessus puisse être écrit comme suit en langage d'assemblage, avec éventuellement un commentaire explicatif après le point-virgule. C'est beaucoup plus facile à lire et à retenir.

http://en.wikipedia.org/wiki/Assembler_language

En d’autres termes, lorsque vous "montez" votre programme d’assemblage, vos instructions telles que

MOV AL, 61h

sont convertis en nombres, auxquels la CPU associe une signification particulière puis agit en conséquence.

10
Nate

Lecture suggérée:

Consultez également les notes de cours de CS152: Architecture et ingénierie informatiques à l’UC Berkeley, cours dans lequel les étudiants utilisent un processeur.

Si vous recherchez Google "home-built cpu", vous trouverez de nombreux avantages.

6
nibot

Au niveau le plus bas extrême, tout ce que le processeur peut faire est d’ajouter. De plus, il peut soustraire, multiplier et diviser (étant donné que ce ne sont que des additions d'une manière différente). La CPU l'utilise pour déplacer des données en mémoire en appliquant les ajouts aux adresses de mémoire.

Gardez cependant à l’esprit que c’est au plus bas niveau possible. Le processeur "comprend" en fait certaines commandes, sous forme de microcode. Voir la réponse de Breakthrough, c'est très bien écrit.

4
n0pe

J'ai donné une réponse connexe à programmers.stackexchange.com, voir Comment les ordinateurs fonctionnent-ils? où je me suis brièvement entretenu de tout les ordinateurs interprètent les instructions relatives aux électrons en mouvement.

2
Lie Ryan