CPU's gebruiken een reeks instructies die machinecode wordt genoemd , dit zijn binaire getallen (reeksen van 0s en 1s). Deze instructies zijn erg eenvoudig en voeren eenvoudige handelingen uit, zoals:
* Rekenkundige en logische bewerkingen: Optellen, aftrekken, vermenigvuldigen, delen, vergelijken (groter dan, kleiner dan, gelijk aan), logisch EN, OF, NIET, enz.
* Gegevensverplaatsing: Gegevens verplaatsen tussen registers (intern CPU-geheugen), geheugenlocaties en invoer-/uitvoerapparaten. Dit omvat het laden van gegevens uit het geheugen in een register, het opslaan van gegevens uit een register in het geheugen en het overbrengen van gegevens tussen registers.
* Controlestroom: De volgorde wijzigen waarin instructies worden uitgevoerd. Dit omvat:
* Springen/takken: Het veranderen van de instructieaanwijzer naar een ander adres in het geheugen, waardoor voorwaardelijke uitvoering (if-then-else-instructies) en lussen mogelijk is.
* Bel/Terug: Subroutines (functies) oproepen en terugkeren naar het punt van de oproep.
* Invoer/uitvoer (I/O): Communiceren met externe apparaten zoals toetsenborden, muizen, beeldschermen, harde schijven en netwerkinterfaces.
* Systeembeheer: Instructies met betrekking tot het beheer van de CPU zelf, zoals het omgaan met interrupts (signalen die gebeurtenissen aangeven die onmiddellijke aandacht vereisen) en het wijzigen van CPU-modi (bijvoorbeeld schakelen tussen gebruikers- en kernelmodus).
Deze basisinstructies worden gecombineerd om complexere bewerkingen en programma's te creëren. Het is belangrijk op te merken dat de *specifieke* instructies aanzienlijk variëren tussen verschillende CPU-architecturen (x86, ARM, RISC-V, enz.). Elke architectuur heeft zijn eigen instructiesetarchitectuur (ISA), die de instructies definieert die hij begrijpt. Hoewel de categorieën instructies vergelijkbaar zijn, verschillen de exacte opcodes (binaire representaties van de instructies) en hun functionaliteiten.
Programmeurs werken zelden rechtstreeks met machinecode. In plaats daarvan gebruiken ze programmeertalen van een hoger niveau (zoals C++, Java, Python) die vervolgens worden gecompileerd of geïnterpreteerd in machinecode die de CPU kan uitvoeren. Assemblers vertalen assembleertaal (een voor mensen leesbare weergave van machinecode) naar machinecode. |