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

73

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

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

Simon Verbeke
la source
Ceci est très instructif, mais ce que je recherche, c’est ce qui permet à un processeur de recevoir et d’envoyer des commandes.
Je ne comprends pas ce commentaire. Un processeur "reçoit" des instructions de la mémoire, en les demandant par adresse. Les seules commandes qu'une "CPU" envoie (dans la vue simpliste, au moins) sont des commandes à la mémoire pour fournir des données et des commandes sur des bus d'E / S pour faire fonctionner des périphériques d'E / S.
Daniel R Hicks
Au cœur de chaque processeur se trouve une logique qui est (littéralement) câblée pour exécuter une procédure simple: prenez la valeur dans le registre des adresses d'instruction, envoyez-la en mémoire, récupérez l'instruction renvoyée par la mémoire, puis collez-la dans un fichier plus nid complexe de logique câblée qui "comprend" ce que l'instruction signifie et comment l'exécuter. Oh, et quelque part, incrémente le registre d'adresses d'instruction.
Daniel R Hicks
Les lecteurs peuvent être intéressés par la question Comment fonctionne un ordinateur? plus sur l' informatique .
Raphaël

Réponses:

88

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.

Percée
la source
2
Ok, je comprends, je pense :) Ainsi, les bits de commande bascule en "commutateurs" pour que le processeur fasse certaines choses avec les données qu'il reçoit?
Simon Verbeke
4
@Simon Verbeke, tout à fait correct. Ils ne font que basculer les commutateurs pour diriger le flux de signaux électriques dans le processeur (ce qui peut également lui demander de recharger plus de commandes!). L'analogie avec le commutateur est bonne, puisque tout est numérique (soit logique 1/0, soit vrai / faux). Juste pour que vous sachiez, le niveau logique est une tension réelle. Il appartient à l’ingénieur de spécifier ce qui est un 0 ou un 1 (par exemple, un 1 logique pourrait être spécifié comme étant supérieur à 2 volts).
Percée le
1
Les "instructions équivalentes binaires" auxquelles le compilateur ou l'assembleur résume tout s'appellent des opcodes. Si vous examinez la structure de l'opcode d'une architecture RISC telle que MIPS ou ARM, vous pouvez voir comment divers bits de l'opcode correspondent à des opérations spécifiques. Intel, en raison de sa longévité et de sa tendance à se prolonger, n’a plus une structure cartographique simple.
LawrenceC
3
Non, je disais qu'en raison de la longévité et de l'extension répétitive de l'architecture x86, la cartographie des bits individuels des opcodes en micro-opérations n'est pas nette, comme dans MIPS ou ARM. dans une certaine mesure (voir d.umn.edu/~gshute/spimsal/talref.html , par exemple, les opcodes Intel ne ressemblent en rien à cela). Je ne pense pas qu'il y avait beaucoup de notion de «RISC» quand Intel a introduit les processeurs x86 en 1978.
LawrenceC
5
Il convient de noter que seuls certains processeurs sont microcodés. Certains (principalement des appareils plus petits) fonctionnent directement à partir des opcodes d'assemblage. Cela dépend de l'architecture.
Fake Name
37

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.

Craig Gidney
la source
5
Belle analogie avec les voitures casser la pédale.
rjmunro
10

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.

Nate
la source
2
Il convient également de noter que l’affectation du symbole mnémonique "mov" à ce motif binaire particulier était complètement arbitraire. Je pourrais en principe écrire un assembleur qui a appelé cette instruction "oof" et cela fonctionnerait aussi bien, en plus d'être plus difficile à retenir.
dmckee
6

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.

nibot
la source
4

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.

n0pe
la source
7
Les opérations logiques telles que AND, OR et NOT, ainsi que le transfert de bits sont plus fondamentales que l'ajout. L'ajout peut en réalité être exprimé en termes de ces opérations. Il existe en réalité des circuits intégrés discrets (série Texas Instruments LS) qui ne font que réaliser ces opérations et il est possible de construire un processeur à partir de ceux-ci. Google "Schéma Pong" pour voir comment un jeu, par exemple, est fait, sans processeur.
LawrenceC
Je voulais dire d'un point de vue plus logiciel :) Oui, du point de vue matériel / logique, vous avez une quantité insensée de portes NAND et NOR. Bon point.
n0pe
2

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.

Lie Ryan
la source