Comment un processeur "sait-il" ce que signifient les différentes commandes?
Je pense aux commandes d'assemblage telles que MOV, PUSH, CALL, etc ...
Comment un processeur "sait-il" ce que signifient les différentes commandes?
Je pense aux commandes d'assemblage telles que MOV, PUSH, CALL, etc ...
Réponses:
Lorsqu'un ordinateur interprète les instructions de niveau assembleur , celles-ci sont converties en leurs équivalents binaires pour que le CPU puisse les 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 de microcode . Pour votre information, une instruction d'assemblage complète consiste, le cas échéant, en un code opération et en toute donnée applicable qui l'accompagne (par exemple, noms de registre, adresses mémoire).
Les instructions de microcode sont extrêmement faibles (plus que l’assemblage) 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 pourrait mettre à jour un indicateur de registre de code de condition avec une nouvelle valeur ou connecter un registre de CPU à l'une des unités ALU . Les tâches plus complexes sont possibles, mais cela vous montre l'idée générale de ce microcode est utilisé pour.
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 dorénavant en 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 à l'exécution d'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 flux à travers les portes logiques de bas niveau . Cela fournit une interface entre les instructions d'assemblage 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.
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 fera en sorte que les valeurs des registres 1 et 2 atteignent l’ALU (unité arithmétique et logique), obligeront 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 processeurs réels 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.
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'identifiant 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 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.
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.
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.
J'ai déjà répondu à la question sur programmers.stackexchange.com, voir Comment fonctionnent les ordinateurs? où j’ai parcouru brièvement tout ce qui a commencé à propos de la façon dont les ordinateurs interprètent les instructions pour faire bouger les électrons.