Registro (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 87.26.35.173 (discussione), riportata alla versione precedente di 79.31.216.216
Etichetta: Rollback
istruzioneu
Etichette: Sostituito Annullato Rimozione di avvisi di servizio Modifica visuale: commutato
Riga 1:
{{F|memorie informatiche|febbraio 2013}}
Un '''registro''' o '''registro del processore''' (in [[Lingua inglese|inglese]]: ''processor register''), in [[informatica]] e nell'[[architettura dei calcolatori]], è una piccola parte di [[memoria (informatica)|memoria]] utilizzata per velocizzare l'[[esecuzione (informatica)|esecuzione]] dei [[Programma (informatica)|programmi]] fornendo un accesso rapido ai valori usati più frequentemente e/o tipicamente, i valori correntemente in uso in una determinata parte di un calcolo.
 
==Descrizione==
Il termine è usato spesso per riferirsi esclusivamente al gruppo di registri che possono essere direttamente indirizzati dalle istruzioni di input e output del [[microprocessore]]. Più propriamente, questi registri sono definiti "architected registers". Per esempio, nell'architettura [[x86]] è disponibile un set di otto registri utilizzabili dalle istruzioni del [[linguaggio macchina]], ma la [[CPU]] conterrà molti più registri per uso interno o con funzioni speciali.
 
I registri costituiscono il punto più alto della gerarchia della memoria, e sono il meccanismo più rapido per il sistema di manipolare i dati. '''''I registri sono normalmente misurati in base al numero di [[bit]] che possono contenere''''' (ad esempio, registri a [[8 bit]] o registri a [[32 bit]]). Attualmente i registri sono implementati normalmente con [[file dei registri]], ma in passato sono stati implementati usando [[flip-flop]] individuali, [[memoria a nuclei di ferrite]] ad alta velocità, [[memoria thin film|memoria ''thin film'']] e vari altri modi.
 
La maggior parte delle moderne architetture dei computer ([[RISC]], o più genericamente architetture ''load-store'') è basata su un'architettura a pipeline che trae beneficio dal limitare l'accesso in memoria alle sole istruzioni load e store, utilizzando soltanto registri e costanti per l'esecuzione di tutte le altre istruzioni.
 
== Classificazione ==
===Classi di registri===
Vi sono molte classi di registri:
 
* Registri di dati: sono usati per memorizzare [[numero intero|numeri interi]]. Nelle CPU più semplici o più vecchie, uno speciale registro per i dati è l'[[accumulatore (informatica)|accumulatore]], usato per calcoli aritmetici.
* Registri di indirizzo: sono usati per memorizzare gli indirizzi e per accedere alla memoria.
* Registro generico: può contenere sia dati che indirizzi (ad esempio [[RWR (informatica)|RWR]]).
* Registri ''floating point'': sono usati per memorizzare numeri a [[virgola mobile]].
* Registri costanti: contengono dati a sola lettura (ad esempio zero, uno, pi greco, ecc.).
* Registri vettoriali: contengono dati utilizzati dalle istruzioni [[SIMD]] (''single instruction, multiple data'').
* Registri speciali: contengono dati interni della CPU, come il ''[[program counter]]'', lo ''[[stack pointer]]'' e il [[registro di stato]].
** Registro di istruzione: contiene l'istruzione corrente.
**[[Registro indice|Registri indice]]: sono usati per modificare l'indirizzo degli [[operandi]].
* In alcune architetture, vi sono dei registri specifici del modello di processore, che memorizzano dati e impostazioni del processore stesso. Essendo registri legati a caratteristiche peculiari di uno specifico modello, non è garantita la presenza o lo stesso funzionamento nelle generazioni successive di quel processore.
* Vi sono inoltre registri dedicati al ''[[fetching]]'' (trasferimento dalla [[RAM]] verso la CPU).
 
I [[registri hardware]] a livello [[firmware]] sono simili ai registri dei processori, ma sono presenti esternamente alle CPU.
 
===Registri del microprocessore===
I registri del microprocessore forniscono un livello di memoria più veloce e ridotto rispetto alla memoria principale e svolgono principalmente le seguenti due funzioni:
 
* registri visibili all'utente: registri ottimizzabili dal programmatore a livello di linguaggio macchina o Assembler. Nei casi di programmazione ad alto livello il compilatore cercherà di fare scelte intelligenti riguardo alle variabili da assegnare ai registri ed alla localizzazione della memoria. Esistono casi in cui è possibile con linguaggi di alto livello (come con il [[C (linguaggio)|C]]) specificare al compilatore quali variabili si vorrebbero memorizzare nei registri. Sono tipicamente registri disponibili sia ai programmi applicativi sia a quelli di sistema. Tali registri sono quello dei dati, degli indirizzi e dei condition code. I registri dei dati possono essere destinati dal programmatore a diverse funzioni. Solitamente sono ristretti a particolari tipi di funzione (ad esempio i registri dedicati ad operazioni in virgola mobile), tuttavia possono essere usati in qualsiasi istruzione macchina. I registri degli indirizzi contengono gli indirizzi dei dati e delle istruzioni contenute nella memoria. Tali registri possono essere di tipo generale o dedicati ad un particolare modo di indirizzamento (''index register'', ''segment pointer'', ''stack pointer'');
 
* registri di stato e di controllo: usati dalla CPU per controllare le sue operazioni e dal sistema operativo per le sue routine privilegiate per il controllo d'esecuzione dei comandi.
 
== Esempi ==
Il numero di registri varia significativamente tra le varie architetture in funzione dell'età dell'[[Instruction set|ISA]] e della tipologia di architettura: per esempio le architetture [[Reduced instruction set computer|RISC]] tendono a essere dotate di un elevato numero di registri mentre le architetture [[Complex instruction set computer|CISC]] che sono mediamente più vecchie tendono ad avere un numero ridotto di registri anche se spesso gli ultimi processori dispongono di un elevato numero di registri nascosti che vengono utilizzati per implementare l'[[Microprocessore superscalare|esecuzione superscalare]] dei programmi.
 
{| class="wikitable"
!Processore
!Registri interi
Line 43 ⟶ 5:
|-
|[[Core Duo|Intel Core Duo]]||8||8
|[[Athlon-n]] MP||8||8
|-
|[[Core 2 Duo|Intel Core 2 Duo]]||16||16
|-
|[[Pentium 4]]||8||8
|-
|[[Pentium 4]] con [[EM64T]]||16||16
|-
|[[Athlon 64]]||16||16
|-
|[[Athlon]] MP||8||8
|-
|[[Opteron]] 240||16||16
|-
|[[Itanium 2]]||128||128
|-
|[[UltraSPARC]] IIIi||32||32
|-
|[[POWER3]]||32||32
|-
|[[MOS Technology 6502|MOS 6502]]||3||0
|}
 
==Voci correlate==
* [[Memoria (informatica)]]
* [[Programma (informatica)]]
 
== Altri progetti ==
{{interprogetto}}
 
{{Controllo di autorità}}
{{Portale|Informatica}}
 
[[Categoria:Memorie informatiche]]
[[Categoria:Gestione della memoria]]