Wat is een instructieset?

Elke CPU is vanaf de grond af ontworpen om een ​​bepaalde instructieset te ondersteunen. Een instructieset is een reeks hardgecodeerde bewerkingen die de CPU kan uitvoeren. Deze bewerkingen kunnen bijvoorbeeld zijn twee getallen bij elkaar optellen, naar een ander deel van het programma springen of twee waarden vergelijken. Elke bewerking die een computer kan uitvoeren, wordt op unieke wijze vertegenwoordigd door een opcode.

Opcodes

Bij het uitvoeren van een programma gebruikt de CPU een programmateller om bij te houden welke instructie vervolgens moet worden uitgevoerd. Wanneer een instructie wordt opgehaald, wordt de programmateller verhoogd met de lengte van de instructie, zodat deze naar het begin van de volgende instructie wijst. Elke instructie bestaat uit een opcode. Afhankelijk van de instructie kan deze al dan niet operanden bevatten. Operanden kunnen een constante waarde zijn of een aanwijzer naar de locatie van een waarde in het CPU-register of in het systeem-RAM.

Nadat de volledige instructie is opgehaald, moet deze worden gedecodeerd. Dit is het proces waarbij de CPU de opcode en eventuele operanden scheidt. De gedecodeerde opcode wordt gebruikt om specifieke elektrische paden in de CPU in of uit te schakelen die zullen resulteren in de juiste werking.

Nadat de instructie is gedecodeerd, wordt deze uitgevoerd. Het exacte gedrag van de CPU is afhankelijk van de bewerking. Een optelbewerking zal twee waarden bij elkaar optellen. Een sprongbewerking berekent waar in het programma naartoe moet worden gesprongen. Een vergelijkingsbewerking vergelijkt twee waarden. Een NOP-operatie blijft stil, omdat NOP staat voor No Operation.

De meeste instructies geven dan het resultaat van de bewerking weer. Deze uitvoer kan naar de processorregisters gaan en, indien nodig, naar het systeem-RAM. Voor elk van deze bewerkingen is een enkele klokcyclus nodig.

Illegale opcodes

Elke CPU-architectuur heeft zijn specifieke lijst met opcodes die door de fabrikant is gepubliceerd. De waarden van deze opcodes zijn niet noodzakelijk dezelfde cross-platform, daarom moet software voor verschillende architecturen worden gecompileerd. In sommige gevallen voegt de fabrikant ook ongedocumenteerde opcodes toe. Deze worden "illegale opcodes" genoemd. Illegale opcodes, hoewel niet gedocumenteerd, zullen elke keer dat ze worden aangeroepen dezelfde functie uitvoeren. Als ongedocumenteerde en niet-standaard functies kunnen updates van de CPU-architectuur ze echter eenvoudig verwijderen.

Sommige vroege computerspellen op de Apple II waren gebaseerd op specifieke illegale opcodes. Vervolgens kregen ze te maken met prestatie- en stabiliteitsproblemen bij de latere Apple IIc CPU-revisie toen de IIc de illegale opcodes verwijderde die de games nodig hadden. Illegale opcodes werden ook gebruikt in kringen ter bescherming van auteursrechten als een beveiligingsmethode door onduidelijkheid in hun strijd tegen piraten die hun inhoud kraken. Sommige illegale opcodes zijn gewoon bedoeld als foutopsporingstools en foutafhandelaars.

De x86 instructieset bevat een groot aantal ongedocumenteerde illegale opcodes. Interessant is dat sommige hiervan worden gedeeld tussen Intel- en AMD-CPU's, wat aangeeft dat beide bedrijven publiekelijk op de hoogte zijn van hun doel terwijl ze geen papieren hebben.

Compilers en montage

De meeste programma's zijn geschreven in talen op hoog niveau. Deze zijn relatief gemakkelijk te lezen, waarbij vaak Engelse woorden of steno worden gebruikt om leercurves te minimaliseren. Om een ​​computer deze programma's te laten uitvoeren, moeten ze worden gecompileerd. Een compiler is eigenlijk een vertaler. Het neemt de code op hoog niveau en zet deze om in computercode, de instructies die de CPU kan begrijpen.

In sommige talen is het ook mogelijk om ongecompileerde code uit te voeren via een eerder gecompileerd programma dat on-the-fly machinecode genereert. Assemblage is een programmeertaal op laag niveau die steno gebruikt om ontwikkelaars direct inzicht en controle te geven over de uitgevoerde bewerkingen. NOP is een voorbeeld van montagesteno.

Conclusie

Een instructieset is een lijst met officiële functies die een CPU-architectuur kan uitvoeren. Het is een lijst met bewerkingen die kunnen worden uitgevoerd. Deze bewerkingen zijn hard gecodeerd in de CPU en worden aangeroepen met behulp van hun respectieve opcodes.

Software gebruikt over het algemeen een compiler om van door mensen leesbare code op hoog niveau te vertalen naar de machinecode die de CPU kan lezen. Soms kan een CPU-architectuur ongedocumenteerde opcodes hebben, illegale opcodes genoemd. Illegale opcodes maken technisch gezien deel uit van de instructieset. Ze zijn echter mogelijk niet betrouwbaar beschikbaar in toekomstige platformiteraties. Vergeet niet om je mening achter te laten in de reacties hieronder.