Question Comment une CPU "sait-elle" quelles commandes et instructions signifient réellement?


Comment un processeur «sait» ce que signifient les différentes commandes?

Je pense aux commandes de niveau assemblage comme MOV, PUSH, CALL, etc.


71
2017-07-06 14:44


origine


C'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 CPU "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 les commandes à la mémoire pour délivrer des données, et les commandes sur les bus d'E / S, pour faire fonctionner les périphériques d'E / S. - Daniel R Hicks
Au cœur de tout processeur se trouve une logique (littéralement) câblée pour exécuter une procédure simple: prenez la valeur du registre d’instructions d’instructions, envoyez-la en mémoire, récupérez l’instruction renvoyée par la mémoire, puis insérez-la dans un registre plus volumineux. nid complexe de logique câblée qui "comprend" ce que signifie l'instruction et comment l'exécuter. Oh, et quelque part là-bas, incrémenter le registre d'adresses d'instruction. - Daniel R Hicks
Les lecteurs peuvent être intéressés par la question Comment fonctionne un ordinateur? sur plus L'informatique. - Raphael


Réponses:


Lorsqu'un ordinateur interprète Assemblée instructions de niveau, ces instructions sont transformées en leurs équivalents binaires pour que le processeur puisse les lire. Lorsque le CPU exécute les instructions, il interprète la partie opcode de l'instruction en "microprogrammes" individuels, contenant leurs microcode équivalents. Pour que vous le sachiez, une instruction d'assemblage complète consiste en un opcode et toute donnée applicable qui l'accompagne, si nécessaire (par exemple, noms de registre, adresses de mémoire).

Les instructions de microcode sont extrêmement basses (plus encore l'assemblage) et contrôlent les signaux numériques réels qui contrôlent le flux de logique dans le microprocesseur. Par exemple, une instruction de microcode pourrait mettre à jour un registre de code de condition signaler avec une nouvelle valeur ou connecter une unité centrale registre avec l'un des ALU unités. Des tâches plus complexes sont possibles, mais cela vous montre l’idée générale de quelle microcode est utilisé pour.

Le flux général de la compilation à l'exécution est le suivant. Les instructions d'assemblage sont assemblées (transformées en leurs équivalents binaires 0 et 1 ou dorénavant, des signaux logiques). Ces signaux logiques sont à leur tour interprétés par la CPU et transformés en signaux logiques de plus 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, selon l'architecture et la conception du processeur (la plupart des manuels de référence de processeur vous indiquent combien de cycles d'horloge sont nécessaires pour exécuter une instruction particulière). comme celui-ci par exemple).

Tout ceci est fait avec un microcode programmé en dur (incorporé physiquement dans le processeur dans une sorte de ROM, défini lors de la fabrication), qui dirige le flux à travers le bas niveau réel des portes logiques. Cela fournit une interface entre les instructions d'assemblage abstraite et la logique électrique physique du processeur.


Ainsi, en résumé, les instructions du processeur sont assemblées et chargées par le processeur. Le processeur utilisera alors ces instructions pour rechercher le microprogramme (sous la forme de microcode) correspondant à cette instruction particulière, ce qui "exécute" réellement l'instruction. Une fois que les microcodes pour 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
2017-07-06 14:48



Ok, je comprends, je pense :) Ainsi, les bits de commande permettent de basculer les "commutateurs" pour que le processeur fasse certaines choses avec les données qu'il reçoit? - Simon Verbeke
@Simon Verbeke, exactement correct. Ils ne font que basculer les commutateurs pour diriger le flux de signaux électriques dans le processeur (ce qui peut également le diriger pour recharger plus de commandes!). L'analogie avec le commutateur est bonne, puisque tout est numérique (soit logique 1/0, soit vrai / faux). Pour que vous le sachiez, le niveau logique est une tension réelle. Il appartient à l'ingénieur de spécifier ce qu'est un 0 ou un 1 (par exemple, un 1 logique pourrait être spécifié comme plus de 2 volts). - Breakthrough
Les "instructions équivalentes binaires" auxquelles le compilateur ou l'assembleur fait tout appel sont appelées opcodes. Si vous examinez la structure de l'opcode d'une architecture RISC telle que MIPS ou ARM, vous pouvez voir comment différents bits de l'opcode correspondent à des opérations spécifiques. Intel, en raison de sa longévité et de sa tendance à s’étendre encore et encore, n’a plus de structure de cartographie simple. - LawrenceC
Non, à cause de la longévité et de l'extension de l'architecture x86, le mappage des bits individuels dans les opcodes en fonction des micro-opérations n'est pas simple comme dans MIPS ou ARM. dans une certaine mesure (voir d.umn.edu/~gshute/spimsal/talref.html, par exemple, les opcodes Intel ne sont pas comme ça). Je ne pense pas qu'il y ait eu beaucoup de notion de "RISC" quand Intel a introduit des processeurs x86 en 1978. - LawrenceC
Il ne faut pas noter que seulement certains Les 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


Le processeur ne sait pas vraiment quelles sont les commandes. Les commandes ne sont que des motifs binaires qui obligent le processeur à interpréter les commandes.

Par exemple, une opération ADD-R1-in-R2 fera en sorte que les valeurs des registres 1 et 2 atteignent l’unité ALU (unité arithmétique et logique), provoquant l’utilisation par l’ALU de la sortie de 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 comme si vous demandiez comment une voiture sait ralentir lorsque vous appuyez sur les freins. La voiture ne sait pas, la pédale de frein vient juste de contrôler indirectement la pression exercée sur les plaquettes par les plaquettes.


37
2017-07-06 16:40



Belle analogie avec les voitures à pédales. - rjmunro


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 ceci   l'instruction est 10110 suivie d'un   Identifiant de 3 bits pour lequel enregistrer   utilisation. L'identifiant de l'AL   registre est 000, donc le suivant   le code machine charge le registre AL   avec les données 01100001.

10110000 01100001 

Ce binaire   code informatique peut être fait plus   lisible par l'homme en l'exprimant dans   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, soit 97 dans   décimal. Langage d'assemblage Intel   fournit le mnémonique MOV (un   abréviation du mouvement) pour les instructions   comme ça, donc le code machine   ci-dessus peut être écrit comme suit dans   langage d'assemblage, complet avec un   commentaire explicatif si nécessaire, après   le point-virgule. C'est beaucoup plus facile de   lire et se souvenir.

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

En d'autres termes, lorsque vous «assemblez» votre programme d'assemblage, vos instructions telles que

MOV AL, 61h

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


10
2017-07-06 14:56



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


Lecture suggérée:

Consultez également les notes de cours de CS152: Architecture informatique et ingénierie à UC Berkeley, un cours dans lequel les étudiants implémentent un processeur.

Si vous google pour "CPU maison", vous trouverez de nombreux goodies.


6
2017-07-06 18:45





À l'extrême plus bas niveau, tout ce que le processeur peut faire, c'est ajouter. De plus, il peut soustraire, multiplier et diviser (étant donné que ce ne sont que des ajouts différents). Le processeur utilise ceci pour déplacer les données en mémoire en appliquant les ajouts aux adresses mémoire.

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


4
2017-07-06 14:52



Les opérations logiques telles que AND, OR et NOT, ainsi que le bitshifting sont plus fondamentaux que l'ajout. L'ajout peut être exprimé en termes d'opérations. Il existe en fait des circuits intégrés discrets (la série Texas Instruments LS) qui ne font que réaliser ces opérations et il est possible d'en créer un type. Google "Pong schematic" pour voir comment un jeu, par exemple, est créé, sans CPU. - LawrenceC
Je voulais dire d'un point de vue plus logiciel :) Oui, du point de vue du matériel / de la logique, vous avez une quantité folle de portes NAND et NOR. Bon point. - n0pe


J'ai reçu une réponse connexe à programmers.stackexchange.com, voir Comment fonctionnent les ordinateurs? où je passais brièvement en revue tout sur la façon dont les ordinateurs interprètent les instructions pour déplacer les électrons.


2
2017-07-06 20:45