Il micro-codice è un altro livello di astrazione oltre il codice macchina. La CPU effettiva esegue microcodice e un motore di traduzione converte il codice macchina in microcodice al volo. Questo viene fatto per una serie di ragioni, tra cui processori più piccoli e veloci, più facili da creare un processore complesso con meno debug e per compatibilità con le versioni precedenti. Ad esempio, il set di istruzioni x86 contiene alcune istruzioni di elaborazione delle stringhe utilizzate raramente. Tuttavia, per rimanere retrocompatibili, devono essere ancora disponibili nei moderni processori x86. Invece di cablare un percorso di esecuzione per queste istruzioni, vengono convertiti in microcodice ed eseguiti. Ciò consente di risparmiare silicio, pur rimanendo compatibile con le versioni precedenti.
Dove risiedono entrambi i tipi di programmi durante l'esecuzione?
Il codice macchina risiede nella cache (dopo essere stato estratto dalla RAM). Il microcodice si trova in una cache di microcodice, a seconda della particolare architettura della macchina. La cache potrebbe essere abbastanza grande da contenere un microcodice sufficiente a contenere il microcodice convertito dalla più grande istruzione di codice macchina possibile, oppure potrebbe essere una cache più grande che memorizza i risultati convertiti di molti codici macchina in modo da non dover riconvertire tutto il codice macchina su ogni iterazione per piccoli loop.
In alcune architetture il microcodice convertito non è memorizzato da nessuna parte: l'unità fetch / translate emette semplicemente una serie di istruzioni di microcodice basate sul codice macchina attualmente in esecuzione. In questo caso, il microcodice viene eseguito da una ROM di qualche tipo e il codice macchina è essenzialmente un indice nella ROM, che indica la serie di istruzioni del microcodice che devono essere eseguite per eseguire completamente l'istruzione del codice macchina.
Esiste una mappatura 1: 1 alle istruzioni true-op del linguaggio assembly?
Il codice macchina e il codice assemblaggio, in generale, sono 1: 1 associati alle istruzioni di assemblaggio. Dipende dall'assemblatore. Gli assemblatori di alto livello possono avere un ampio set di macro che consentono di scrivere una riga di codice assembly e l'assemblatore produrrà diversi codici macchina.
Ma in generale un linguaggio di assemblaggio "puro" può essere convertito direttamente in codice macchina utilizzando la tabella dei set di istruzioni nel manuale del processore.
Non sono sicuro di cosa intendi con "istruzioni di funzionamento vero". Forse puoi spiegare il riferimento.
Il formato di entrambi è definito dall'architettura del processore?
Il formato del codice macchina e del microcodice sono definiti dall'architettura del processore.