Microcode
Microcode is programmacode die door een CPU wordt uitgevoerd en die machinetaal interpreteert.
Een CPU die microcode gebruikt (zoals Intels x86 serie) voert machinetaal niet direct in de hardware uit. In plaats daarvan wordt de machinetaal geïnterpreteerd door een microcodeprogramma, dat op zijn beurt wel direct door de hardware uitgevoerd wordt.
Microcode wordt vooral gebruikt in processors die veel en complexe instructies hebben (CISC-processors). Het decoderen en uitvoeren van instructies is bij deze processors te complex om in de hardware te implementeren.
Microcode bevindt zich, in tegenstelling tot alle andere soorten programmacode (inclusief machinetaal), niet in het hoofdgeheugen, maar in een speciaal geheugen op de processor zelf. Dit geheugen, de control store, is bij een microprocessor meestal read-only, maar dat is niet noodzakelijk zo: soms wordt microcode tijdens het opstarten van de computer vanuit een andere locatie in de control-store geladen. Dit maakt het mogelijk om bugs te repareren of om nieuwe instructies aan de instructieset van de CPU toe te voegen. Ook is het mogelijk met het vervangen van de microcode een andere computer te emuleren. Zo kan een Univac-computer een Philips-computer emuleren en dus programma's draaien die voor de Philips geschreven zijn.
Andere betekenis
bewerkenEen andere betekenis van microcode wordt gehanteerd bij sommige instructiesets, zoals de PDP-8. In een instructie zorgen diverse bits ervoor dat bewerkingen worden uitgevoerd, en desnoods kunnen meerdere bits in dezelfde instructie gezet zijn. Bijvoorbeeld:
binair | mnemonisch | betekenis | resultaat in accumulator |
---|---|---|---|
111 000 000 000 |
NOP | er gebeurt niets | |
111 010 000 000 |
CLA | maak de accumulator nul | 000 000 000 000 |
111 000 100 000 |
CMA | inverteer alle bits in de accumulator | ~AC |
111 000 000 001 |
IAC | verhoog accumulator met 1 | AC 1 |
111 000 000 010 |
RAL | schuif AC naar links | AC AC |
111 010 100 000 |
CLA CMA | maak accumulator nul en inverteer alle bits | 111 111 111 111 |
111 010 000 001 |
CLA IAC | maak accumulator nul en verhoog met 1 | 000 000 000 001 |
111 010 000 011 |
CLA IAC RAL | maak accumulator nul, verhoog met 1, schuif naar links | 000 000 000 010 |