Microprogrammazione vs. programmazione in linguaggio macchina


10

Sono un po 'confuso tra il livello di microprogrammazione e il livello del linguaggio macchina. Per esempio:

  1. Dove risiedono entrambi i tipi di programmi durante l'esecuzione?
  2. Esiste una mappatura 1: 1 alle istruzioni true-op del linguaggio assembly?
  3. Il formato di entrambi è definito dall'architettura del processore?

4
Se non l'hai ancora letto, consulta l'articolo [Wikipedia] [1]; è abbastanza bello. [1]: en.wikipedia.org/wiki/Microcode
Shawn J. Goff

5
Il microcodice probabilmente non è quello di cui stai parlando. A meno che tu non stia progettando la tua CPU, probabilmente non sarai interessato al microcodice. Potresti confondere il "micro" in "microcodice" con "microcontrollore", ma non sono la stessa cosa.
davr

1
No, sto prendendo microcodice. Sto studiando gli interni della CPU e sto cercando di capire i livelli più bassi come il microcodice.

Risposte:


7

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.


per "true-op", intendo istruzioni che NON sono istruzioni di linguaggio assembly sintetico o pseudo. per la seconda domanda, intendevo chiedere se le istruzioni del microcodice sono associate alle istruzioni true-op del linguaggio assembly.

@ Louis - In generale non esiste un codice assembly pubblicato che sia una traduzione 1: 1 nel microcodice. Intel e AMD (e altri) mantengono il loro microcodice proprietario, in quanto fornisce una visione molto forte dell'architettura interna del processore. Ho sentito che per alcuni scopi specializzati sono disposti a fornire informazioni al riguardo, ad esempio ai ricercatori, in modo che possano ottenere l'ultimo 1% delle prestazioni dalla macchina per determinate applicazioni, ma per la maggior parte solo le specifiche pubblicate include il codice macchina e la descrizione generale dell'architettura.
Adam Davis

8

Fondamentalmente, il microcodice espande un set di istruzioni CPU limitato per contenere istruzioni di livello superiore che sarebbero ingombranti da implementare nell'hardware, ma relativamente facili da costruire con le istruzioni esistenti. Il microcodice consente a un processore con un piccolo set di istruzioni di funzionare come uno con un set di istruzioni più grande.

Supponiamo che tu stia lavorando con un set di istruzioni MARIE e desideri una funzione Aggiungi x, y, ma l'architettura consente solo un Aggiungi x (che aggiunge semplicemente ciò che è attualmente nel registro a x) in modo da aggiungere un'istruzione microcodice:

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

Ora quando il codice del linguaggio macchina dice:

ADD x,y

cerca la funzione ADD che hai aggiunto alla ROM (il tuo microcodice) e la esegue. Questo è fantastico perché aumenta il tuo set di istruzioni, che consente un codice macchina più leggibile, e poiché il tuo microcodice è memorizzato nella ROM, è anche un po 'più veloce rispetto a chiamare LOAD e ADD dalla RAM.

Lavoravo in un'azienda che effettivamente scriveva microcodici per eseguire misurazioni personalizzate a velocità molto elevate sui loro sistemi più vecchi. Tuttavia, con i progressi degli FPGA sono passati a quelli, che sono molto più veloci (poiché in realtà stai implementando le "istruzioni personalizzate" nell'hardware anziché nella ROM).


come hai scritto ed eseguito il microcodice?
Erik Kaplun,

@ErikAllik Puoi farlo solo costruendo il tuo computer da zero.
user253751

5

Molti processori sono gestiti da una macchina a stati la cui sequenza di transizione è influenzata dalle istruzioni in esecuzione. Le "istruzioni" del microcodice spesso specificano le interazioni tra vari registri e bus in un modo che non sarebbe visibile a un programmatore.

Ad esempio, un'istruzione di microcodice per una CPU a 8 bit nello stato n. 1 potrebbe specificare che le abilitazioni di uscita per entrambe le metà del contatore del programma dovrebbero essere attive (facendo sì che il contatore del programma sia emesso sul bus di indirizzo interno superiore e inferiore), il il segnale programma-contatore-incremento dovrebbe essere attivo, i segnali di aggancio dell'indirizzo esterno dovrebbero essere attivi (quindi il bus dell'indirizzo esterno seguirà quello interno) e il segnale di lettura RAM dovrebbe essere attivo e il controller dovrebbe passare allo stato # 2.

Nello stato n. 2, il bus di dati esterno dovrebbe essere inviato al bus di dati primario interno e il registro delle istruzioni, che legge da quel bus, dovrebbe essere caricato. Il contatore del programma dovrebbe essere come prima emesso su entrambe le metà del bus degli indirizzi e deve essere emessa un'altra lettura RAM. I bit 5-7 del registro di istruzioni devono essere caricati nei bit 0-2 del controller di stato, i bit 3 del registro di stato devono essere impostati a meno che i bit 1-7 del registro di istruzioni non siano tutti impostati e altri bit del registro di stato dovrebbe essere chiaro, il risultato netto è che lo stato successivo sarà # 7- # 15.

Si noti che il microcodice non è realmente definito in termini di istruzioni, ma piuttosto in termini di combinazioni di segnali di controllo. L'hardware non verrà impostato per consentire istruzioni generiche nel microcodice, ma piuttosto per caricare o emettere vari registri da / verso i bus su cui si trovano, o collegare bus differenti tra loro e utilizzare vari bit o combinazioni di essi per seleziona stati diversi. Molti aspetti del progetto saranno cablati (ad esempio i codici opzionali FE e FF potrebbero essere inseriti in un case speciale nell'hardware piuttosto che nel microcodice). L'idea con il microcodice non è di eseguire programmi, ma di sostituire la logica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.