Cos’è un registro del computer?

La risposta più breve è che tiene un singolo valore all'interno della CPU per l'aritmetica o per referenziare la memoria. Il linguaggio macchina di base di tutti i processori può eseguire istruzioni sia sui registri che sulla memoria. Alcuni processori limitano le istruzioni sulla memoria a caricare e memorizzare, mentre tutto il resto viene fatto sui registri.

In generale un registro tende ad essere un insieme di bit (normalmente la dimensione di salvataggio come la parola della CPU) che si trova sulle connessioni interne all'ALU (esegue tutte le operazioni sui valori) o all'unità load/store (il nome e la funzione varia, ma sarà responsabile dell'interazione della CPU con la memoria). Questo posizionamento richiede che i registri operino nell'ordine della velocità della CPU. Alcuni possono impiegare alcuni cicli per rispondere in quanto la pipeline impedisce il sovraccarico, mentre altri devono operare in una frazione di ciclo per leggere e scrivere nella stessa operazione (il classico accumulatore).

Le prime CPU avevano spesso usi speciali per ogni registro. L'accumulatore sarebbe stato collegato all'ALU come ingresso e uscita. I contatori avrebbero avuto un incremento speciale e sarebbero stati cablati nella logica di confronto. I puntatori di memoria sarebbero stati cablati direttamente alla gestione della memoria e avrebbero avuto a disposizione una semplice addizione. Man mano che l'immobile del silicio diventava più disponibile e le prestazioni critiche, avere un banco di registri più generali su un bus che poteva fare qualsiasi connessione divenne la preferenza.

I registri sono anche la chiave per le prestazioni. Più operazioni potete fare senza riferimenti alla memoria, più il vostro codice sarà veloce. I riferimenti alla memoria tendono a causare pause in attesa che il valore venga restituito o scritto. Negli anni '90 ci fu un grande dibattito sull'uso del silicio per la cache o per i registri. In esempi semplici, aggiungere registri era più veloce che aggiungere 5-10 volte la cache. Quando i banchi di registro ebbero un enorme successo, il prezzo di uno switch di contesto era enorme e i compilatori non si stavano ottimizzando bene per questo. SPARC aveva persino un anello di registri per cercare di aggirare questo problema con risultati contrastanti.

I registri sono diventati complessi e potenti, ma sono ancora lo stesso supporto di base a valore singolo che sono sempre stati. Guardate alcuni dei vecchi libri di programmazione e le spiegazioni sono molto chiare. Vorrei raccomandare "Programmare il 6502" di Rodnay Zaks. È facile da seguire e ben scritto nonostante sia per un'architettura morta.

main-qimg-7f819dcfc1be8b5d993bd9f9935b5d4b.webp