In het volgende artikel gaan we dieper in op het onderwerp Instructieset, dat de afgelopen tijd veel belangstelling en discussie heeft gegenereerd. Vanaf het begin tot aan de relevantie ervan vandaag de dag is Instructieset het onderwerp geweest van studie en analyse door verschillende specialisten in het veld, die verschillende perspectieven en benaderingen op dit onderwerp hebben bijgedragen. Via dit artikel zullen we de verschillende facetten van Instructieset onderzoeken, van de praktische implicaties tot de impact ervan op de samenleving. Daarnaast zullen we de evolutie ervan in de loop van de tijd onderzoeken en de huidige trends eromheen analyseren. Zonder twijfel is Instructieset een fascinerend onderwerp dat het verdient om uitgebreid en kritisch te worden behandeld, dus nodigen we je uit om deze opwindende wereld te betreden en alles achter Instructieset te ontdekken.
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.
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.
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.
Bij het ontwerpen van een processor en bijbehorende instructieset worden in het algemeen twee verschillende strategieën gevolgd:
Een instructieset specificeert verschillende soorten instructies die vaak volgende argumenten bevatten:
De meeste processors bieden instructies voor de volgende functies:
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.
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.