Enhver CPU er designet fra grunnen av for å støtte et bestemt instruksjonssett. Et instruksjonssett er et sett med hardkodede operasjoner som CPU kan utføre. Disse operasjonene kan for eksempel være å legge sammen to tall, hoppe til en annen del av programmet eller sammenligne to verdier. Hver operasjon en datamaskin kan utføre er unikt representert av en opcode.
Opkoder
Når du kjører et program, bruker CPU en programteller for å spore hvilken instruksjon som må utføres neste gang. Når en instruksjon hentes, økes programtelleren med lengden på instruksjonen slik at den peker mot starten av neste instruksjon. Hver instruksjon består av en opkode. Avhengig av instruksjonen kan den inneholde operander eller ikke. Operander kan være en konstant verdi eller en peker til plasseringen av en verdi i CPU-registeret eller i system-RAM.
Når hele instruksjonen er hentet, må den dekodes. Dette er prosessen der CPU-en skiller op-koden og eventuelle operander. Den dekodede opkoden brukes til å aktivere eller deaktivere spesifikke elektriske veier i CPU-en som vil resultere i riktig drift.
Når instruksjonen er dekodet, vil den bli utført. Den nøyaktige oppførselen til CPU vil avhenge av operasjonen. En addisjonsoperasjon vil summere to verdier sammen. En hoppoperasjon vil beregne hvor i programmet du skal hoppe til. En sammenligningsoperasjon vil sammenligne to verdier. En NOP-operasjon vil sitte inaktiv, da NOP står for No Operation.
De fleste instruksjoner vil da gi resultatet av operasjonen. Denne utgangen kan gå til prosessorregistrene og, om nødvendig, til system-RAM. Hver av disse operasjonene tar en enkelt klokkesyklus å fullføre.
Ulovlige opkoder
Hver CPU-arkitektur har sin spesifikke liste over opkoder publisert av produsenten. Verdiene til disse op-kodene er ikke nødvendigvis de samme kryssplattformene, og det er grunnen til at programvare må kompileres for forskjellige arkitekturer. I noen tilfeller inkluderer produsenten også udokumenterte opkoder. Disse blir referert til som "ulovlige opkoder." Ulovlige opkoder, selv om de er udokumenterte, vil utføre den samme funksjonen hver gang de blir anropt. Som udokumenterte og ikke-standardfunksjoner kan oppdateringer til CPU-arkitekturen ganske enkelt fjerne dem.
Noen tidlige dataspill på Apple II stolte på spesifikke ulovlige opkoder. De fikk deretter ytelses- og stabilitetsproblemer på den senere Apple IIc CPU-revisjonen da IIc fjernet de ulovlige opkodene spillene krevde. Ulovlige opkoder ble også brukt i opphavsrettsbeskyttelseskretser som en sikkerhetsmetode gjennom uklarhet i kampen mot pirater som knekker innholdet deres. Noen ulovlige opkoder er ganske enkelt ment som feilsøkingsverktøy og feilbehandlere.
x86-instruksjonssettet inneholder et stort antall udokumenterte ulovlige opkoder. Interessant nok er noen av disse delt mellom Intel og AMD CPUer, noe som indikerer at begge selskapene er offentlig klar over formålet mens de er udokumenterte.
Kompilatorer og montering
De fleste programmene er skrevet på høynivåspråk. Disse er relativt enkle å lese, og bruker ofte engelske ord eller stenografi for å minimere læringskurver. For at en datamaskin skal kjøre disse programmene, må de kompileres. En kompilator er i utgangspunktet en oversetter. Den tar høynivåkoden og konverterer den til datakode, instruksjonene som CPU kan forstå.
Det er også mulig, på noen språk, å kjøre ukompilert kode gjennom et tidligere kompilert program som genererer maskinkode i farten. Assembly er et programmeringsspråk på lavt nivå som bruker stenografi for å tillate utviklere direkte synlighet og kontroll over operasjonene som utføres. NOP er et eksempel på monteringsstenografi.
Konklusjon
Et instruksjonssett er en liste over offisielle funksjoner som en CPU-arkitektur kan kjøre. Det er en liste over operasjoner som kan utføres. Disse operasjonene er hardkodet inn i CPU-en og kalles ved å bruke deres respektive op-koder.
Programvare bruker vanligvis en kompilator for å oversette fra menneskelesbar høynivåkode til maskinkoden som CPU kan lese. Noen ganger kan en CPU-arkitektur ha udokumenterte opkoder, kalt ulovlige opkoder. Ulovlige opkoder er teknisk sett en del av instruksjonssettet. Imidlertid er de kanskje ikke pålitelig tilgjengelige i fremtidige plattformiterasjoner. Ikke glem å legge igjen tankene dine i kommentarene nedenfor.