Een instructieset is de verzameling van alle mogelijke machinecodes die een processor kan verwerken. De instructies worden als binaire codes in het geheugen gezet, het programmeren zelf gebeurt in assembleertalen of (meestal) hogere programmeertalen.

De meeste moderne processors hebben een zeer uitgebreide instructieset, waarbij een enkele instructie meerdere functies kan uitvoeren. Bijvoorbeeld: "haal de waarde op die op de geheugenplaats staat die door register X wordt aangewezen, tel deze op bij de waarde in het werkregister en laat register X naar de volgende geheugenplaats wijzen".

Iedere processorfamilie heeft over het algemeen een eigen instructieset die niet uitwisselbaar is met die van andere. Dit betekent dat programma's die voor een bepaald processortype gemaakt zijn niet zonder meer op een ander type kunnen werken. Met hercompileren, emulators of crosscompilers kan dit probleem ondervangen worden.

Orthogonaliteit

Zie orthogonale instructieset voor het hoofdartikel over dit onderwerp.

Een orthogonale instructieset biedt onafhankelijkheid tussen enerzijds instructies en anderzijds gegevenstypen en adresseermodi. Hoe orthogonaler de instructieset, hoe eenvoudiger en "zuiverder" deze is, met een aantal voordelen naar flexibiliteit en programmeerbaarheid. Echter, te ver doorgedreven orthogonaliteit kan ook leiden tot veel niet of weinig gebruikte combinaties en daarmee lage bitdichtheden en inefficiëntie op verschillende gebieden. Modernere ontwerpen trachten daarom de voordelen van orthogonaliteit te combineren met de voordelen van compactie voortvloeiend uit niet-orthogonaliteit, door het maken van welbepaalde keuzes. Zo maakt men bijvoorbeeld bij RISC-instructiesets onderscheid tussen instructies die primair gegevens van en naar het hoofdgeheugen verplaatsen, gegevensbewerkingsinstructies en besturingsinstructies, versus de adresseringsmodi welke elke categorie ter beschikking heeft.

Implementatie

x86-instructieset

De wellicht bekendste instructieset is de x86-instructieset die gebruikt wordt voor de Intel 8086/8088-processor en (met uitbreidingen) in latere versies daarvan. Minder bekend, maar waarschijnlijk het meest gebruikt, is de ARM-instructieset. Men vindt ARM processors in zeer uiteenlopende soorten apparatuur, van mobiele telefoons en PDA's tot printers of harde schijven.

RISC en CISC

Bij het ontwerpen van een processor en bijbehorende instructieset worden in het algemeen twee verschillende strategieën gevolgd:

Instructies

Een instructieset specificeert verschillende soorten instructies die vaak volgende argumenten bevatten:

Bewerkingen

De meeste processors bieden instructies voor de volgende functies:

Ophalen en wegschrijven van data

Rekenkundige en logische bewerkingen

Control flow-bewerkingen

Andere

Instructielengte

De instructielengte hangt af van de gebruikte woordlengte in de processor. Voorbeelden zijn 16-bit, 32-bit of 64-bit processoren. Een instructieset kan zowel een vaste instructielengte (bijv. elke instructie bestaat uit 32-bit) als een variabele lengte hebben (bijv. de x86-architectuur, die tot 120 bits kan gaan). Instructies met vaste-lengte zijn meestal gemakkelijker af te handelen (zo zal een instructie niet over twee verschillende cacheblokken liggen). Variabele-lengte instructies bieden echter het voordeel dat er eindeloos nieuwe instructies kunnen geïntroduceerd worden.

Voorstelling

Machinecode wordt meestal in assembleertaal voorgesteld i.p.v. de binaire vorm, om het geheel leesbaar te houden voor programmeurs. Heel vaak kan de compiler deze genereren.

Zie ook