Instruktionsuppsättning

Från Rilpedia

Version från den 12 maj 2009 kl. 10.43 av Grundin (Diskussion)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif
0-operandmaskin (stackmaskin)
1-operandmaskin (accumulator)
2-operandmaskin
3-operandmaskin
minne-till-minne-maskin

En instruktionsuppsättning eller ISA (från engelskans Instruction Set Architecture) beskriver vilka tillgångar som finns tillgängliga för programmeringen av en processor. Bland annat beskrivs de instruktioner, register, adresseringslägen, minnesarkitektur och interrupthantering som processor stöder. Instruktionsuppsättningen definierar även processorns maskinkod, dvs hur instruktionerna blir uttryckta som sekvenser av binära ettor och nollor.

Instruktionsuppsättningar kan skilja sig mellan processorer inte bara på grund av vilka operationer som stöds, utan även hur hämtning och lagring av värden i arbetsminnet stöds (CISC vs RISC).

Två olika processorer kan ha samma instruktionsuppsättning även om de internt har helt olika mikroarkitekturer, se t.ex. Intels Pentium- och AMD:s Athlon-processorer.

Innehåll

Instruktionstyper

Även om det teoretiskt möjligt att konstruera en processor som endast har en slags instruktion, har de flesta vanliga processor instruktioner av ett flertal olika typer.

Aritmetikinstruktioner

Aritmetikinstruktioner utför operationer på heltal. Bland operationerna räknas addition, subtraktion, logiska operationer som AND, OR, och XOR, aritmetisk och logisk skiftning, m.fl. Multiplikation och division förekommer ofta, men inte alltid eftersom dessa operation kan utföras av algoritmer som använder sig av enklare additions- och subtraktionsinstruktioner.

Flyttalsintruktioner

Flyttalsinstruktioner utför operationer på flyttal. Bland operationerna finns addition, subtraktion, multiplikation, division, stöd för konvertering mellan heltal och flyttal, samt ibland även mer avancerade operationer som kvadratrot, trigonometriska funktioner m.m.

Minnesinstruktioner

Vissa RISC-arkitekturer kan endast hämta och lagra värden i arbetsminnet genom särskilda minnesinstruktioner (ofta kallade load och store).

Hopp- och greninstruktioner

Hoppinstruktioner tillåter programmet att ändra instruktionssekventsens normalt linjära förlopp genom att ändra värdet på instruktionspekaren. Greninstruktioner tillåter dessutom hopp som betingas av ett villkor (t.ex. "utför hoppet endast om ett registervärde är lika med noll). Dessa instruktioner är avgörande för programmering; utan dem går det inte att skriva programslingor.

Anrops- och returinstruktioner

Anropsinstruktioner möjliggör abstraktion genom att tillåta anrop till subrutiner. Processorn lagrar en returadress (nästa instruktion) och börjar exekvera subrutinens instruktioner. När en returinstruktion påträffas återställs den lagrade returadressen, varpå processorn fortsätter exekvera sekvensiellt. Särskilda systemanropsinstruktioner anropar operativsystemet å programmets vägnar för att utföra operativsystemspecifika funktioner som t.ex. att läsa från datafiler eller visa text på bildskärmen.

Systeminstruktioner

Några av processorns instruktioner är endast avsedda att användas av operativsystemet; dessa systeminstruktioner är "skyddade" i det avseendet att om ett användarprogram försöker använda dem så avbryts programmet omedelbart av operativsystemet. Några processorarkitekturer (som Intel 8080 och x86) har speciella in- och utenhetsinstruktioner som används för att kommunicera med kringutrustning; dessa är i skyddade i moderna operativsystem för att förhindra att flera program orsakar konflikter genom att försöka använda sig av samma kringenhet samtidigt.

Operander

En typisk instruktion kan ta 0 eller fler operander (parametrar), beroende på instruktionens art och processorns arkitektur. Instruktionsuppsättningar kan kategoriseras alltefter hur många operander instruktionerna använder som mest.

  • 0-operandmaskiner (ibland stackmaskiner) använder sig av de översta få orden på stacken för att utföra sina beräkningar. Två heltal kan adderas med tre instruktioner: push a, push b, add.
  • 1-operandmaskiner var vanliga i datorålderns barndom. Varje instruktion hänvisar till maximalt en operand och resultatet placeras i processorns ackumulatorregister: load a, add b, store c.
  • 2-operandmaskiner - både CISC och RISC-maskiner har sådana instruktioner. En CISC-maskin (som t.ex.Intel 8086) kan addera två tal så här: load r1,a; add r1,b; store c,r1, där r1 är ett processorregister.
  • 3-operandmaskiner - oftast RISC-maskiner. Operander i 3-operandinstruktioner är nästan alltid processorregister, varför det krävs särskilda lagrings- och åtkomstinstruktioner för att hämta in värden i registren.

Operander kan vara av olika typer:

  • Omedelbara (immediate): konstanter som 3, -1 eller 0.
  • Register: syftar på ett av processorregistren, exempelvis R1, EAX.
  • Adressoperander: används i hopp-, gren-, och anropsinstruktioner för att ange den plats där processorn skall börja hämta sina instruktioner från.
  • Minnesoperander: anger en minnesadress från vilken data skall hämtas eller lagras. Minnesoperander kan i sin tur klassifieras ytterligare:
    • Direkta adresser anger en konstant adress, t.ex: mov eax,[0x31340000] (x86-instruktion)
    • Indirekta adresser med offset anger adresser baserat på ett registervärde, t.ex: mov eax,[esi+0x12]
Personliga verktyg