Datorzinātnē instrukcija ir viena procesora darbība, ko nosaka procesora instrukciju kopums.

Instrukcijas lielums jeb garums ir ļoti dažāds - no 4 bitu dažos mikrokontrolleros līdz pat baitu reizēm dažās ļoti garu instrukciju vārdu (VLIW) sistēmās. Lielākajā daļā mūsdienu procesoru, ko izmanto personālajos datoros, galvenajos datoros un superdatoros, instrukciju lielums ir no 16 līdz 64 bitiem. Dažās arhitektūrās, jo īpaši datoros ar samazinātu instrukciju kopu, instrukciju garums ir fiksēts, parasti tas atbilst attiecīgās arhitektūras vārda lielumam.

Tradicionālajās arhitektūrās instrukcija ietver opkodu, kas norāda veicamo operāciju, piemēram, "pievienot atmiņas saturu reģistram", un nulli vai vairākus operandu specifikatorus, kas var norādīt reģistrus, atmiņas vietas vai burtiskus datus. Operandu specifikatoriem var būt adresācijas režīmi, kas nosaka to nozīmi, vai tie var būt fiksētos laukos.

VLIW arhitektūrās, pie kurām pieder daudzas mikrokoda arhitektūras, vienā instrukcijā tiek norādītas vairākas vienlaicīgas operācijas un operandi.

Instrukcijas reti tiek norādītas mašīnkoda formā; tās var norādīt programmētāji, izmantojot asemblera valodu, vai, biežāk, tās var ģenerēt kompilatori.

Ir vēl viena vispārīgāka "instrukcijas" definīcija, kas nav saistīta tikai ar procesora instrukciju kopumu, un tā ir: Instrukcija" var būt jebkurš izpildāmas datorprogrammas elementa attēlojums.

Papildus paskaidrojumi un nozīme praksē:

  • Instrukcijas garuma un formāta ietekme: īsāki, fiksēta garuma kodējumi (piemēram, daudzi RISC dizaini) ļauj vienkāršāku un ātrāku dekodēšanu un optimālāk izmanto pipelines, savukārt mainīga garuma instrukcijas (kā dažās CISC arhitektūrās) var būt kompakta atmiņā, bet sarežģītāk dekodējamas.
  • Komponentes: instrukcija parasti ietver opkodu, nulli vai vairāk operandus, iespējamos adresācijas režīmus un, dažos gadījumos, papildu bitus stāvokļa vai privileģētām darbībām. Operandi var būt reģistru nosaukumi, atmiņas adreses vai tiešas vērtības (immediate).
  • Adresācijas režīmi: nosaka, kā interpretēt operandus — tie var būt tieši vērtības, reģistru saturs, atmiņas adreses, reģistra+offset kombinācijas u. c. Šie režīmi ietekmē gan koda izteiktību, gan izpildes veiktspēju.
  • Samērā reti tieši raksta mašīnkodu: Programmētāji parasti izmanto asembleri (mnemonikas, kas atbilst opkodiem) vai augsta līmeņa valodu kompilatorus; pastāv arī disassembleri, kas pārveido mašīnkodu atpakaļ uz lasāmāku formu.
  • Mikrokods un starplīmeņi: daži procesori izmanto mikrokodu — instrukcijas augstākā līmenī tiek izpildītas kā daudzu zemāka līmeņa mikrooperāciju secība. Tas ļauj sarežģītāku instrukciju realizāciju, bet var palēnināt izpildi salīdzinājumā ar tieši aparatūrā atbalstītām vienkāršām instrukcijām.
  • Performance un noformējuma kompromisi: arhitektūras dizaineri izvēlas starp instrukciju saprotamību, kodēšanas kompaktiem risinājumiem, vieglu dekodēšanu, izpildes paralēlismu un atmiņas izmantošanas efektivitāti. Piemēram, fiksēta garuma 32 bitu instrukcijas ir ērtas izpildes plūsmas (fetch) un priekšizpētes (prefetch) optimizācijai, bet mainīga garuma kodējumus lieto, lai samazinātu kodola atmiņas ietaupījumu.
  • Praktiski piemēri: daudzi mūsdienu PC un serveru procesori izmanto sarežģītas, bieži daļēji mainīga garuma instrukcijas kopas; daudzas iebūvētas ierīces izmanto ļoti īsas (piem., 4–8 bitu) instrukcijas, lai samazinātu aparatūras kaudzi un atmiņas patēriņu.

Kopsavilkums: Instrukcija ir pamatelements, kas nosaka, ko procesors veic. Instrukciju garums, formāts un iespējamie operand tipi būtiski ietekmē arhitektūras vienkāršību, izpildes ātrumu un atmiņas efektivitāti. Lai gan izstrādātāji reti raksta mašīnkodu tieši, izpratne par instrukciju struktūru un ierobežojumiem ir svarīga optimālas programmatūras un aparatūras izstrādei.