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.
Gerelateerd
De basis van de 8080: pinnen en interrupts
Arnout van Kempen over rommelen in een digitale wereld.
De lijst der lijsten
Arnout van Kempen over rommelen in een digitale wereld.
Van 4004 naar 86-64
Arnout van Kempen over rommelen in een digitale wereld.
We gaan diep!
Arnout van Kempen over rommelen in een digitale wereld.
Herhalingen
Arnout van Kempen over rommelen in een digitale wereld.