De CPU genereert geen adressen in de zin dat hij ze uit het niets creëert. In plaats daarvan *gebruikt* de CPU adressen die door andere delen van het computersysteem zijn gegenereerd, voornamelijk:
* Instructiewijzer (IP) / Programmateller (PC): Dit interne CPU-register bevat het adres van de volgende uit te voeren instructie. De CPU haalt instructies op uit het geheugen met behulp van dit adres. De IP/PC wordt na elke instructieophaalactie *verhoogd*, waardoor effectief het adres voor de volgende instructie wordt gegenereerd (opeenvolgend).
* Berekende adressen: De CPU berekent geheugenadressen op basis van instructies. Vaak gaat het om:
* Directe adressering: De instructie bevat expliciet het geheugenadres.
* Indirecte adressering: De instructie bevat het adres van een geheugenlocatie *die* het adres van de gegevens bevat.
* Indirecte adressering registreren: Het adres wordt bewaard in een CPU-register.
* Basis + Offset-adressering: Een basisadres (misschien uit een register) wordt toegevoegd aan een offsetwaarde die in de instructie is gespecificeerd. Dit is gebruikelijk voor toegang tot elementen in arrays.
Deze berekeningen worden uitgevoerd door de Arithmetic Logic Unit (ALU) van de CPU, maar omvatten niet het *genereren* van adressen op een vrije manier. De adressen zijn afgeleid van waarden die al in registers of geheugen aanwezig zijn.
* DMA-controllers (Direct Memory Access): Deze gespecialiseerde chips kunnen onafhankelijk van de CPU geheugenadressen genereren om gegevens rechtstreeks over te dragen tussen geheugen en randapparatuur (bijvoorbeeld een harde schijf of netwerkkaart). Hoewel hierdoor adressen worden gegenereerd, valt dit buiten de directe controle van de CPU.
Kortom, de CPU *genereert* geen adressen op een creatieve manier. Het haalt adressen op uit instructies, interne registers, of ontvangt ze van andere hardwarecomponenten. Zijn rol is om deze adressen te *gebruiken* om toegang te krijgen tot het geheugen. |