Hacker News

Quanti registri ha una CPU x86-64? (2020)

Quanti registri ha una CPU x86-64? (2020) Questa esplorazione ne approfondisce molti, esaminandone il significato e il potenziale: Mewayz Business OS.

4 minimo letto

Mewayz Team

Editorial Team

Hacker News

Una CPU x86-64 ha 16 registri per uso generale, ma il file di registro completo è molto più grande e comprende oltre 100 registri architettonici quando si includono registri a virgola mobile, SIMD, segmenti, controllo e specifici del modello. Comprendere il quadro completo è importante sia che tu stia scrivendo codice di basso livello, eseguendo il debug delle prestazioni del sistema o semplicemente soddisfacendo la tua curiosità su ciò che accade sotto il sistema operativo.

Quali sono i 16 registri per uso generale in x86-64?

L'estensione a 64 bit dell'architettura x86 (AMD64/Intel 64) ha raddoppiato gli 8 registri generici originali dell'IA-32 portandoli a 16. Questi sono i cavalli di battaglia del calcolo quotidiano, utilizzati per l'aritmetica, l'indirizzamento della memoria, gli argomenti delle funzioni e i valori restituiti.

RAX, RBX, RCX, RDX: i registri originali "accumulatore", "base", "contatore" e "dati", ora estesi alla larghezza di 64 bit

RSI, RDI: indice di origine e indice di destinazione, spesso utilizzati per operazioni su stringhe e argomenti di funzioni

RSP, RBP: puntatore allo stack e puntatore di base, fondamentali per la gestione dello stack di chiamate e degli stack frame

Da R8 a R15: otto nuovissimi registri introdotti in x86-64, non presenti nell'architettura a 32 bit, offrendo ai compilatori molta più flessibilità per l'ottimizzazione

Ciascuno di questi registri a 64 bit è compatibile con le versioni precedenti, il che significa che è possibile indirizzare i 32 bit inferiori (ad esempio EAX), 16 bit (AX) o anche le singole metà a 8 bit (AH, AL) - un'eredità di progettazione che risale all'Intel 8086 del 1978.

Quanti registri totali ha effettivamente x86-64?

💡 LO SAPEVI?

Mewayz sostituisce più di 8 strumenti business in un'unica piattaforma

CRM · Fatturazione · HR · Progetti · Prenotazioni · eCommerce · POS · Analisi. Piano gratuito per sempre disponibile.

Inizia gratis →

Il numero cresce sostanzialmente se si guarda oltre i registri di uso generale. Un moderno processore x86-64 espone diverse classi di registri distinte sia ai programmi dello spazio utente che al kernel del sistema operativo:

Il registro RFLAGS è un singolo registro a 64 bit che contiene i codici di condizione - zero flag, carry flag, overflow flag - che controllano la ramificazione condizionale dopo ogni operazione aritmetica o logica. Il registro RIP (puntatore istruzione) tiene traccia dell'indirizzo della successiva istruzione da eseguire e non è direttamente modificabile dalla maggior parte delle istruzioni.

Sei registri di segmento (CS, DS, ES, FS, GS, SS) rimangono dal modello di memoria segmentata delle precedenti architetture x86. Nella modalità a 64 bit, la maggior parte sono rudimentali, ma FS e GS sono ancora utilizzati attivamente dai sistemi operativi per puntare all'archiviazione locale del thread e alle strutture dati del kernel locale della CPU.

Poi ci sono 16 registri XMM (XMM0–XMM15) introdotti con SSE, ciascuno largo 128 bit. Con AVX questi diventano registri YMM a 256 bit e con AVX-512 si espandono ulteriormente fino ai registri ZMM a 512 bit, aggiungendo altri 32 registri al file sull'hardware supportato. I registri FPU legacy 8 x87 (ST0–ST7), organizzati come stack, gestiscono il calcolo in virgola mobile a precisione estesa a 80 bit.

Approfondimento chiave: il numero totale di registri visibili nel codice dello spazio utente in un tipico processo x86-64 è di circa 40-50 (uso generale, flag, puntatore di istruzione, segmento e registri XMM). Quando si aggiungono registri di controllo in modalità kernel, registri di debug e centinaia di registri specifici del modello (MSR), lo spazio completo dei registri architetturali arriva a migliaia, la maggior parte dei quali non viene mai toccata dal software ordinario.

Perché x86-64 ha raddoppiato il conteggio dei registri per uso generale?

Il salto da 8 a 16 registri generici è stato uno dei miglioramenti più pratici apportati da AMD durante la progettazione dell'estensione x86-64 nei primi anni 2000. Gli 8 registri originali creavano un serio collo di bottiglia: i compilatori erano costretti a riversare costantemente variabili in memoria (lo stack) perché semplicemente non c'erano abbastanza registri per contenere valori intermedi. Questa fuoriuscita genera istruzioni di caricamento e archiviazione aggiuntive, bruciando sia tempo che larghezza di banda della memoria.

Con 16 registri di uso generale, la convenzione di chiamata x86-64 (System V AMD64 ABI su Linux/macOS, Microsoft x64 ABI su Windows) può passare i primi argomenti di funzione interamente in registri - sei argomenti interi su Linux (RDI, RSI, RDX, RCX, R8, R9) - senza toccare affatto lo stack

Build Your Business OS Today

From freelancers to agencies, Mewayz powers 138,000+ businesses with 207 integrated modules. Start free, upgrade when you grow.

Create Free Account →

Prova Mewayz Gratis

Piattaforma tutto-in-uno per CRM, fatturazione, progetti, HR e altro. Nessuna carta di credito richiesta.

Inizia a gestire la tua azienda in modo più intelligente oggi.

Unisciti a 30,000+ aziende. Piano gratuito per sempre · Nessuna carta di credito richiesta.

Lo hai trovato utile? Condividilo.

Pronto a metterlo in pratica?

Unisciti a 30,000+ aziende che utilizzano Mewayz. Piano gratuito per sempre — nessuna carta di credito richiesta.

Inizia prova gratuita →

Pronto a passare all'azione?

Inizia la tua prova gratuita Mewayz oggi

Piattaforma aziendale tutto-in-uno. Nessuna carta di credito richiesta.

Inizia gratis →

Prova gratuita di 14 giorni · Nessuna carta di credito · Disdici quando vuoi