NOP (mnemonische computerinstructie)

Uit Wikipedia, de vrije encyclopedie
(Doorverwezen vanaf NOP (instructieset))

NOP (No Operation) is in de instructieset van vrijwel alle microprocessoren en computers de mnemonische code voor een instructie die geen enkel effect heeft, behalve het verhogen van de instructieteller.

Officieel is NOP de afkorting van No Operation. Er wordt echter beweerd dat de code is voorgesteld door de Nederlandse hoogleraar Blaauw, en dat hij daarbij het Nederlandse volkswoord nop of noppes in gedachten had. Blaauw heeft een belangrijke bijdrage geleverd aan het ontwerp van de IBM 360.

Toevallige NOP-instructies[bewerken | brontekst bewerken]

In sommige instructiesets is NOP een instructie die 'toevallig' niets doet.

IBM 360[bewerken | brontekst bewerken]

Bij de IBM 360 is het de opdracht BCR 0,0. De interne code daarvan is 0700. Het is een sprongopdracht (07) onder geen enkele voorwaarde (0) naar het adres dat in register 0 (0) staat. Een sprong onder geen enkele voorwaarde is natuurlijk geen sprong, en bovendien is register 0 niet bruikbaar voor een sprongadres.

De IBM 360 heeft nog veel meer instructies die niets doen, bijvoorbeeld LR 3,3 (interne code 1833) waarmee de inhoud van register 3 naar register 3 wordt gekopieerd, maar BCR 0,0 is de officiële NOP-instructie.

i86[bewerken | brontekst bewerken]

Bij de IBM-PC, die werkt met de 8088 en zijn opvolgers is het XCHG AX,AX met interne code 90. Deze instructie verwisselt de inhoud van register AX met AX, wat natuurlijk geen enkel effect heeft.

Aparte NOP-instructies[bewerken | brontekst bewerken]

8080[bewerken | brontekst bewerken]

De 8080 en zijn opvolgers 8085 en Z80 hebben een aparte NOP-instructie met de (voor de hand liggende) interne code 00. Ook deze processors hebben echter een aantal instructies die toevallig niets doen, zoals MOV B,B (interne code 40), zodat een aparte NOP-instructie kan worden beschouwd als een verspilling van de beschikbare instructies.

Gebruik[bewerken | brontekst bewerken]

Op het eerste gezicht is een NOP-instructie niet erg zinvol. Hij kan echter worden gebruikt om een deel van een programma tijdelijk onwerkzaam te maken. Dat deel wordt dan vervangen door NOP-instructies. Het is daarvoor gewenst dat een NOP-instructie zo kort mogelijk is - het is immers niet mogelijk een oneven aantal bytes te vervangen door NOP-instructies als een NOP-instructie twee bytes lang is. Bij de hierboven genoemde microprocessors is de NOP-instructie een enkele byte lang. Bij de IBM 360 is de lengte van een instructie altijd twee bytes of een veelvoud daarvan, en bovendien moet elke instructie beginnen op een even adres, zodat de NOP-instructie hier zonder bezwaar twee bytes lang mag zijn. Een NOP-instructie kan verder dienen om een zeer geringe vertraging in het programma in te bouwen.

CNOP[bewerken | brontekst bewerken]

De IBM 360 heeft een assemblerinstructie met de naam CNOP. De betekenis daarvan is conditional no operation, wat merkwaardig overkomt. Bij deze computer is het namelijk soms nodig dat gegevens op een adres staan dat een veelvoud is van 4 of 8. De instructie CNOP wordt door de assembler vertaald in nul of meer NOP-instructies, zodanig dat de eerstvolgende instructie op het juiste veelvoud komt te staan.