Microprogrammation vs programmation en langage machine


10

Je suis un peu confus entre le niveau de microprogrammation et le niveau de langage machine. Par exemple:

  1. Où résident les deux types de programmes pendant leur exécution?
  2. L'un ou l'autre a-t-il un mappage 1: 1 aux instructions True-Op du langage d'assemblage?
  3. Le format de l'un ou l'autre est-il défini par l'architecture du processeur?

4
Si vous ne l'avez pas encore lu, consultez l'article [Wikipedia] [1]; c'est assez bien. [1]: en.wikipedia.org/wiki/Microcode
Shawn J. Goff

5
Le microcode n'est probablement pas ce dont vous parlez. À moins que vous ne conceviez votre propre processeur, vous ne serez probablement pas intéressé par le microcode. Vous confondez peut-être le «micro» du «microcode» avec le «microcontrôleur», mais ce n'est pas la même chose.
davr

1
Non, je prends le microcode. J'étudie les internes du processeur et j'essaie de comprendre les couches les plus basses comme le microcode.

Réponses:


7

Le micro-code est un autre niveau d'abstraction au-delà du code machine. Le processeur réel exécute le microcode et un moteur de traduction convertit le code machine en microcode à la volée. Cela se fait pour diverses raisons, notamment des processeurs plus rapides et plus petits, plus faciles à créer un processeur complexe avec moins de débogage et pour une compatibilité descendante. Par exemple, le jeu d'instructions x86 contient des instructions de traitement de chaîne rarement utilisées. Cependant, pour rester rétrocompatibles, ils doivent toujours être disponibles dans les processeurs x86 modernes. Plutôt que de câbler un chemin d'exécution pour ces instructions, elles sont converties en microcode et exécutées. Cela économise du silicium, tout en restant rétrocompatible.

Où résident les deux types de programmes pendant leur exécution?

Le code machine réside dans le cache (après avoir été extrait de la RAM). Le microcode réside dans un cache de microcode, en fonction de l'architecture particulière de la machine. Le cache peut être suffisamment grand pour contenir suffisamment de microcode pour contenir le microcode converti à partir de la plus grande instruction de code machine possible, ou il peut s'agir d'un cache plus grand qui stocke les résultats convertis de nombreux codes machine afin qu'il n'ait pas besoin de tout reconvertir. le code machine à chaque itération pour les petites boucles.

Dans certaines architectures, le microcode converti n'est stocké nulle part - l'unité d'extraction / traduction crache simplement une série d'instructions de microcode basées sur le code machine en cours d'exécution. Dans ce cas, le microcode s'exécute à partir d'une sorte de ROM, et le code machine est essentiellement un index dans la ROM - pointant vers la série d'instructions de microcode qui doivent être exécutées afin d'exécuter complètement l'instruction de code machine.

L'un ou l'autre a-t-il un mappage 1: 1 aux instructions True-Op du langage d'assemblage?

Le code machine et le code d'assemblage sont en général 1: 1 mis en correspondance avec les instructions d'assemblage. Cela dépend de l'assembleur. Les assembleurs de haut niveau peuvent avoir un grand ensemble de macros qui permettent d'écrire une ligne de code d'assemblage et l'assembleur produira plusieurs codes machine.

Mais en général, le langage d'assemblage «pur» peut être converti directement en code machine à l'aide du tableau des instructions du manuel du processeur.

Je ne suis pas sûr de ce que vous entendez par "instructions vraies-op". Vous pouvez peut-être expliquer la référence.

Le format de l'un ou l'autre est-il défini par l'architecture du processeur?

Le format du code machine et du microcode est défini par l'architecture du processeur.


par «true-op», je veux dire des instructions qui ne sont PAS des instructions en langage synthétique ou pseudo-assembleur. pour la 2e question, je voulais demander si les instructions du microcode correspondent aux instructions true-op du langage assembleur.

@Louis - En général, il n'y a pas de code d'assembly publié qui est une traduction 1: 1 vers le microcode. Intel et AMD (et d'autres) gardent leur microcode propriétaire, car il donne un aperçu très fort de l'architecture interne du processeur. J'ai entendu dire qu'à certaines fins spécialisées, ils sont prêts à fournir des informations à ce sujet, par exemple, aux chercheurs afin qu'ils puissent obtenir le dernier 1% de performances de la machine pour certaines applications, mais pour la plupart, les spécifications publiées uniquement inclut le code machine et la description générale de l'architecture.
Adam Davis

8

Fondamentalement, le microcode étend un jeu d'instructions CPU limité pour contenir des instructions de niveau supérieur qui seraient lourdes à mettre en œuvre dans le matériel, mais relativement faciles à construire avec les instructions existantes. Le microcode permet à un processeur avec un petit jeu d'instructions de fonctionner comme un processeur avec un plus grand jeu d'instructions.

Disons que vous travaillez avec un jeu d'instructions MARIE et que vous souhaitez une fonction Add x, y, mais l'architecture n'autorise qu'un Add x (qui ajoute simplement à x ce qui est actuellement dans le registre), vous ajoutez donc une instruction de microcode:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

Maintenant, quand votre code de langage machine dit:

ADD x,y

il recherche la fonction ADD que vous avez ajoutée à la ROM (votre microcode) et l'exécute. C'est génial car cela augmente votre jeu d'instructions, ce qui permet un code machine plus lisible, et puisque votre microcode est stocké dans la ROM, c'est aussi un peu plus rapide que d'appeler LOAD et ADD depuis la RAM.

J'avais l'habitude de travailler dans une entreprise qui écrivait du microcode pour effectuer des mesures personnalisées à très haute vitesse sur leurs anciens systèmes. Cependant, avec les progrès des FPGA, ils sont passés à ceux qui sont beaucoup plus rapides (puisque vous implémentez réellement les "instructions personnalisées" dans le matériel au lieu de la ROM).


comment avez-vous écrit et exécuté le microcode?
Erik Kaplun

@ErikAllik Vous ne pouvez le faire qu'en construisant votre propre ordinateur à partir de zéro.
user253751

5

De nombreux processeurs sont pilotés par une machine à états dont la séquence de transition est affectée par les instructions en cours d'exécution. Les "instructions" de microcode spécifient souvent les interactions entre divers registres et bus d'une manière qui ne serait pas visible pour un programmeur.

Par exemple, une instruction de microcode pour un processeur 8 bits dans l'état n ° 1 pourrait spécifier que les sorties activées pour les deux moitiés du compteur de programme doivent être actives (ce qui provoque la sortie du compteur de programme sur le bus d'adresse interne supérieur et inférieur), le le signal d'incrémentation du compteur de programme doit être actif, les signaux de verrouillage d'adresse externe doivent être actifs (donc le bus d'adresse externe suivra celui interne) et le signal de lecture RAM doit être actif, et le contrôleur doit passer à l'état n ° 2.

Dans l'état n ° 2, le bus de données externe doit alimenter le bus de données primaire interne et le registre d'instructions, qui lit à partir de ce bus, doit être chargé. Le compteur de programme doit, comme précédemment, être émis sur les deux moitiés du bus d'adresse et une autre lecture RAM doit être émise. Les bits 5-7 du registre d'instructions doivent être chargés dans les bits 0-2 du contrôleur d'état, le bit 3 du registre d'état doit être défini, sauf si les bits 1-7 du registre d'instructions sont tous définis, et les autres bits du registre d'état. devrait être clair, le résultat net étant que le prochain état sera # 7- # 15.

Notez que le microcode n'est pas vraiment défini en termes d'instructions, mais plutôt en termes de combinaisons de signaux de contrôle. Le matériel ne sera pas configuré pour permettre des instructions à usage général dans le microcode, mais plutôt pour charger ou sortir divers registres depuis / vers les bus sur lesquels ils se trouvent, ou connecter différents bus entre eux, et utiliser divers bits ou combinaisons de ceux-ci pour sélectionnez différents états. De nombreux aspects de la conception seront câblés (par exemple, les opcodes FE et FF peuvent être placés dans un boîtier spécial plutôt que dans un microcode). L'idée avec le microcode n'est pas d'exécuter des programmes, mais de remplacer la logique.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.