Condividi tramite


Informazioni sulla finestra Registri in Visual Studio (C#, C++, Visual Basic, F#)

La finestra Registri è disponibile solo se il debug a livello di indirizzo è abilitato nella finestra di dialogo Opzioni , nodo Debug .

I registri sono posizioni speciali all'interno di un processore (CPU) usato per archiviare piccole parti di dati su cui il processore sta lavorando attivamente. La compilazione o l'interpretazione del codice sorgente genera istruzioni che spostano i dati dalla memoria ai registri e viceversa, in base alle esigenze. L'accesso ai dati nei registri è molto veloce rispetto all'accesso ai dati in memoria, quindi il codice che consente al responsabile del trattamento di mantenere i dati in un registro e accedervi tende ripetutamente a essere eseguito più velocemente del codice che richiede al processore di caricare e scaricare costantemente i registri. Per semplificare la conservazione dei dati nei registri da parte del compilatore ed eseguire altre ottimizzazioni, è consigliabile evitare di usare le variabili globali e basarsi sulle variabili locali il più possibile. Il codice scritto in questo modo si dice avere una buona località di riferimento. In alcuni linguaggi, ad esempio C/C++, il programmatore può dichiarare una variabile di registro, che indica al compilatore di provare a mantenere sempre la variabile in un registro. Per altre informazioni, vedere Parola chiave Register.

I registri possono essere suddivisi in due tipi: utilizzo generico e scopo speciale. I registri per utilizzo generico contengono dati per operazioni generali, ad esempio l'aggiunta di due numeri insieme o il riferimento a un elemento in una matrice. I registri speciali hanno scopi specifici e significato specializzato. Un buon esempio è il registro del puntatore di stack, usato dal processore per gestire lo stack delle chiamate del programma. In qualità di programmatore, è probabile che tu non manipoli direttamente il puntatore dello stack. Tuttavia, è essenziale per il corretto funzionamento del programma perché senza il puntatore dello stack, il processore non sa dove tornare alla fine di una chiamata di funzione.

La maggior parte dei registri per utilizzo generico contiene solo un singolo elemento dati. Ad esempio, un singolo numero intero, un numero a virgola mobile o un elemento di una matrice. Alcuni processori più recenti hanno registri più grandi, denominati registri vettoriali, che possono contenere una piccola matrice di dati. Poiché contengono così tanti dati, i registri vettoriali consentono l'esecuzione molto rapida delle operazioni che coinvolgono matrici. I registri vettoriali sono stati usati per la prima volta su supercomputer costosi e ad alte prestazioni, ma sono ora disponibili sui microprocessori in cui vengono usati per sfruttare al massimo le operazioni grafiche a elevato utilizzo.

Un processore ha in genere due set di registri per utilizzo generico, uno ottimizzato per le operazioni a virgola mobile e l'altro per le operazioni integer. Non sorprendentemente, questi sono chiamati registri a virgola mobile e integer.

Il codice gestito viene compilato in fase di esecuzione in codice nativo che accede ai registri fisici del microprocessore. Nella finestra Registri vengono visualizzati questi registri fisici per Common Language Runtime o codice nativo. La finestra Registri non visualizza informazioni di registrazione per lo script o l'applicazione SQL, perché script e SQL sono linguaggi che non supportano il concetto di registri.

Per altre informazioni sulla visualizzazione della finestra Registri , vedere Uso della finestra Registri.

Quando si esamina la finestra Registri , verranno visualizzate voci come EAX = 003110D8.

Il simbolo a sinistra del = segno è il nome del registro, , EAXin questo caso. Il numero a destra del = segno rappresenta il contenuto del registro.

La finestra Registri consente di eseguire più operazioni che visualizzare il contenuto di un registro. Quando si è in modalità di interruzione nel codice nativo, è possibile fare clic sul contenuto di un registro e modificare il valore. Questa non è una cosa che dovresti fare in modo casuale. A meno che non si capisca il registro che si sta modificando e i dati in esso contenuti, è probabile che il risultato di una modifica senza attenzione sia un arresto anomalo del programma o altre conseguenze indesiderate. Sfortunatamente, una spiegazione dettagliata dei set di registri dei vari processori compatibili con Intel e Intel va ben oltre l'ambito di questa breve introduzione.

Registrare i gruppi

Per ridurre la confusione, la finestra Registri organizza i registri in gruppi. Se si fa clic con il pulsante destro del mouse sulla finestra Registri , verrà visualizzato un menu di scelta rapida contenente un elenco di gruppi, che è possibile visualizzare o nascondere nel modo desiderato.

Contrassegni di registrazione

Per i processori Intel x86, nella finestra Registri potrebbero essere visualizzati i flag seguenti. Durante una sessione di debug, è anche possibile modificare questi flag.

Flag Imposta valore
Overflow OV = 1
Direction UP = 1
Interrompere EI = 1
Segno PL = 1
Zero ZR = 1
Trasporto ausiliario AC = 1
Parity PE = 1
Portare CY = 1