Hacker News

Hoeveel registers heeft een x86-64 CPU? (2020)

Hoeveel registers heeft een x86-64 CPU? (2020) Deze verkenning gaat in op veel daarvan en onderzoekt de betekenis en de potentiële implicatie ervan — Mewayz Business OS.

4 min gelezen

Mewayz Team

Editorial Team

Hacker News

Een x86-64 CPU heeft 16 registers voor algemene doeleinden, maar het volledige registerbestand is veel groter: het omvat meer dan 100 architecturale registers als je drijvende-komma-, SIMD-, segment-, besturings- en modelspecifieke registers meeneemt. Het is van belang dat u het volledige plaatje begrijpt, of u nu code op laag niveau schrijft, fouten in de systeemprestaties oplost of eenvoudigweg uw nieuwsgierigheid bevredigt over wat er onder het besturingssysteem gebeurt.

Wat zijn de 16 registers voor algemene doeleinden in x86-64?

De 64-bits uitbreiding van de x86-architectuur (AMD64/Intel 64) verdubbelde de oorspronkelijke 8 registers voor algemene doeleinden van IA-32 naar 16. Dit zijn de werkpaarden van de dagelijkse berekeningen - gebruikt voor rekenkunde, geheugenadressering, functieargumenten en retourwaarden.

RAX, RBX, RCX, RDX - de originele "accumulator", "basis", "teller" en "data" registers, nu uitgebreid tot 64-bit breedte

RSI, RDI — bronindex en bestemmingsindex, vaak gebruikt voor stringbewerkingen en functieargumenten

RSP, RBP — stack pointer en base pointer, cruciaal voor het beheren van de call-stack en stack-frames

R8 tot en met R15 — acht gloednieuwe registers geïntroduceerd in x86-64, niet aanwezig in de 32-bits architectuur, waardoor compilers veel meer flexibiliteit krijgen voor optimalisatie

Elk van deze 64-bits registers is achterwaarts compatibel, wat betekent dat je de onderste 32 bits (bijvoorbeeld EAX), 16 bits (AX) of zelfs individuele 8-bits helften (AH, AL) kunt aanspreken - een ontwerperfenis die teruggaat tot de Intel 8086 uit 1978.

Hoeveel totale registers heeft x86-64 eigenlijk?

💡 WIST JE DAT?

Mewayz vervangt 8+ zakelijke tools in één platform

CRM · Facturatie · HR · Projecten · Boekingen · eCommerce · POS · Analytics. Voor altijd gratis abonnement beschikbaar.

Begin gratis →

Het aantal groeit aanzienlijk als je verder kijkt dan registers voor algemene doeleinden. Een moderne x86-64-processor stelt verschillende afzonderlijke registerklassen bloot aan zowel gebruikersruimteprogramma's als de kernel van het besturingssysteem:

Het RFLAGS-register is een enkel 64-bits register dat conditiecodes bevat (zero flag, carry flag, overflow flag) die de voorwaardelijke vertakking controleren na elke rekenkundige of logische bewerking. Het RIP-register (instructiewijzer) volgt het adres van de volgende uit te voeren instructie en kan door de meeste instructies niet rechtstreeks worden gewijzigd.

Zes segmentregisters (CS, DS, ES, FS, GS, SS) zijn overgebleven van het gesegmenteerde geheugenmodel van eerdere x86-architecturen. In de 64-bits modus zijn de meeste rudimentair, maar FS en GS worden nog steeds actief gebruikt door besturingssystemen om te verwijzen naar thread-lokale opslag en CPU-lokale kerneldatastructuren.

Dan zijn er 16 XMM-registers (XMM0-XMM15) geïntroduceerd met SSE, elk 128 bits breed. Met AVX worden dit 256-bit YMM-registers, en met AVX-512 breiden ze zich verder uit naar 512-bit ZMM-registers - waardoor nog eens 32 registers aan het bestand worden toegevoegd op ondersteunde hardware. De bestaande 8 x87 FPU-registers (ST0-ST7), georganiseerd als een stapel, verwerken 80-bit drijvende-kommaberekeningen met uitgebreide precisie.

Belangrijk inzicht: Het totale aantal registers dat zichtbaar is voor gebruikersruimtecode in een typisch x86-64-proces is ongeveer 40-50 (registers voor algemeen gebruik, vlaggen, instructiewijzer, segment en XMM). Wanneer je controleregisters in de kernelmodus, debug-registers en de honderden Model Specific Registers (MSR's) toevoegt, loopt de volledige architecturale registerruimte in de duizenden - waarvan de meeste nooit door gewone software worden beïnvloed.

Waarom verdubbelde x86-64 het aantal registers voor algemene doeleinden?

De sprong van 8 naar 16 registers voor algemene doeleinden was een van de meest praktische verbeteringen die AMD begin jaren 2000 aanbracht bij het ontwerpen van de x86-64-extensie. De oorspronkelijke acht registers vormden een ernstig knelpunt: compilers werden gedwongen voortdurend variabelen naar het geheugen (de stapel) te sturen, omdat er simpelweg niet genoeg registers waren om tussenliggende waarden vast te houden. Deze verspilling genereert extra laad- en opslaginstructies, waardoor zowel tijd als geheugenbandbreedte worden verbrand.

Met 16 registers voor algemene doeleinden kan de x86-64-aanroepconventie (System V AMD64 ABI op Linux/macOS, Microsoft x64 ABI op Windows) de eerste verschillende functieargumenten volledig in registers doorgeven - zes integer-argumenten op Linux (RDI, RSI, RDX, RCX, R8, R9) - zonder de stapel aan te raken

All Your Business Tools in One Place

Stop juggling multiple apps. Mewayz combines 207 tools for just $19/month — from inventory to HR, booking to analytics. No credit card required to start.

Try Mewayz Free →

Probeer Mewayz Gratis

Alles-in-één platform voor CRM, facturatie, projecten, HR & meer. Geen creditcard nodig.

Begin vandaag nog slimmer met het beheren van je bedrijf.

Sluit je aan bij 30,000+ bedrijven. Voor altijd gratis abonnement · Geen creditcard nodig.

Klaar om dit in de praktijk te brengen?

Sluit je aan bij 30,000+ bedrijven die Mewayz gebruiken. Voor altijd gratis abonnement — geen creditcard nodig.

Start Gratis Proefperiode →

Klaar om actie te ondernemen?

Start vandaag je gratis Mewayz proefperiode

Alles-in-één bedrijfsplatform. Geen creditcard vereist.

Begin gratis →

14 dagen gratis proefperiode · Geen creditcard · Altijd opzegbaar