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.