#Klooienmetcomputers

De basis van de 8080: registers en de ALU

Arnout van Kempen over rommelen in een digitale wereld.

Aan de binnenkant bestaat een 8080, zoals de Von Neumann-architectuur voorschrijft, uit een Arithmetic Logical Unit, een ALU, een controlunit en wat intern geheugen. De ALU doet grofweg al het rekenwerk en het uitvoeren van logische bewerkingen. De controlunit houdt bij waar de volgende programma-instructie is te vinden, leest die instructie in en voert deze uit. Het interne geheugen bestaat uit zeven locaties van 8 bits, enkele statusbits die samen de Flags of vlaggen worden genoemd en opslag voor de huidige instructie. De zeven locaties worden registers genoemd en hebben de namen A, B, C, D, E, H en L. Daarnaast zijn er nog specifieke 16 bits-registers, de Stack Pointer (SP) en de Program Counter (PC). A is afkorting voor accumulator. Dit is het register dat electronisch rechtstreeks aan de ALU is gekoppeld en daarmee het register waarmee het meeste rekenwerk moet worden gedaan. De andere algemene registers kunnen als enkelvoudig 8 bits-register worden gebruikt, maar ook in paren als 16 bits-registers: BC, DE en HL. De keuze voor HL is er in gelegen dat het een geheugensteuntje is voor wat de hoge en de lage byte in het 16 bits-woord zijn.

Geen echt register, maar een programma-abstractie is het register M. Waar in een opdracht M voorkomt, verwijst dit naar de inhoud van het geheugenadres dat wordt aangewezen door HL. Een andere aanduiding daarvoor is (HL), wat dus ook betekent: de inhoud van het geheugenadres waar HL naar verwijst.

De SP is een slimme pointer voor het opslaan van gegevens op een stack. Een onderwerp dat we in C en Rust al uitgebreid tegenkwamen. De stack is vooral handig voor de dynamische opslag van gegevens, bijvoorbeeld bij het aanroepen van een interrupthandler waar het lopende programma direct alle data ergens kwijt moet (de stack) om die weer terug te halen bij terugkeer.

De PC tenslotte is niets anders dan het adres van de volgende instructie. Na iedere instructie fetch wordt de instructie gedecodeerd voor uitvoering en intussen wordt PC met 1 verhoogd. Na uitvoering van de instructie kan dan de volgende instructie worden opgehaald.

PC en SP werken samen bij de aanroep van een subroutine of een interrupthandler. Bijvoorbeeld: als een programma de instructie   CALL 0005h tegenkomt, dan wordt de PC op de stack geplaatst, 0005 wordt in de PC geplaatst. En als vervolgens de instructie  RET wordt gevolgd, dan wordt het adres van de stack weer in PC geplaatst en SP wordt weer verlaagd.

De vlaggen ten slotte, werken als volgt:
S is 1 als de laatste berekening een negatieve uitkomst had.
Z is 1 als de laatste berekening als uitkomst nul had.
P is 1 als de laatste uitkomst een even aantal 1-en (binair) opleverde.
C is 1 als bij de laatste optelling een carry plaatsvond.
AC werkt als C, maar dan voor BCD gecodeerde berekeningen.

 Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.

Arnout van Kempen di CCO CISA is directeur compliance & risk bij aaff, de fusieorganisatie van Alfa en ABAB. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.