Instruktion i datalogi: Definition, instruktionssæt og formater
Lær hvad en instruktion i datalogi er—instruktionssæt, formater, længder og arkitekturforskelle forklaret klart for studerende og udviklere.
Inden for datalogi er en instruktion en enkelt operation i en processor, som er defineret af processorens instruktionssæt.
Størrelsen eller længden af en instruktion varierer meget, fra så lidt som 4 bit i nogle mikrocontrollere til mange multipla af en byte i nogle VLIW-systemer (Very Long Instruction Word). De fleste moderne processorer, der anvendes i personlige computere, mainframes og supercomputere, har instruktionsstørrelser på mellem 16 og 64 bit. I nogle arkitekturer, især i computere med reduceret instruktionssæt, har instruktionerne en fast længde, der typisk svarer til den pågældende arkitekturs ordstørrelse.
På traditionelle arkitekturer indeholder en instruktion en opkode, der angiver den operation, der skal udføres, f.eks. "tilføj indholdet af hukommelsen til registeret", og nul eller flere operandspecifikatorer, som kan angive registre, hukommelsesplaceringer eller bogstavelige data. Operandspecifikatorerne kan have adresseringstilstande, der bestemmer deres betydning, eller de kan være i faste felter.
I VLIW-arkitekturer, som omfatter mange mikrokodearkitekturer, specificeres flere samtidige operationer og operander i en enkelt instruktion.
Instruktioner specificeres sjældent i deres maskinkodeform; de kan specificeres af programmører ved hjælp af et assemblagesprog eller, mere almindeligt, genereres af compilere.
Der findes en anden mere generel definition af en "instruktion", som ikke kun er relateret til processorinstruktionssættet, som er: En "instruktion" kan være enhver repræsentation af et element i et eksekverbart computerprogram.
Instruktionsformater og -længder
Instruktionsformatet beskriver hvordan opkoden, operandfelter og eventuelle umiddelbare værdier er placeret inde i en instruktion. Formater kan være:
- Faste længder: Alle instruktioner har samme antal bits (typisk i mange RISC-arkitekturer). Fordelen er enkel dekodning og enklere pipeline.
- Variable længder: Instruktioner kan have forskellig længde (almindeligt i mange CISC-arkitekturer). Dette giver større kodekomprimering, men øger kompleksiteten ved dekodning.
- VLIW / brede ord: Flere operationer pakkes i én "lang" instruktion, hvilket lader kompileren udnytte parallelisme direkte.
Instruktionsstørrelser angives ofte i bits eller bytes, og krav til justering (alignment) i hukommelsen kan påvirke, hvordan instruktionerne læses (f.eks. word-aligned adgange). På lavt niveau repræsenteres instruktioner som binære værdier, men i praksis ses de ofte som hexadecimale bytes i værktøjer og dumps.
Opkoder, operander og adresseringsformer
Opkoden (opcode) vælger den operation, som processoren skal udføre. Operander angiver hvilke data operationen arbejder på. Almindelige adresseringsformer inkluderer:
- Registeradressering: Operander ligger i CPU-registre.
- Direkte hukommelsesadressering: Instruktionen indeholder en hukommelsesadresse.
- Indirekte adressering: Et register peger på den egentlige hukommelsesadresse.
- Indekseret/offset-adressering: En baseadresse plus et offset (bruges til arrays og strukturer).
- Immediat (konstant): En værdi indlejret i instruktionen selv.
- Betinget/relativ adressering: Hops og grene kan bruge adresser relative til den aktuelle instruktionsadresse.
Typer af instruktioner
Instruktionssættet omfatter typisk flere kategorier:
- Dataflytning: load/store, move.
- Aritmetiske og logiske: add, sub, and, or, shift.
- Kontrolflow: jump, branch, call, return.
- Flydende-punkt og vektor/SIMD-instruktioner: specialiseret beregning på flere data samtidig.
- System- og privilegerede instruktioner: ændrer CPU-tilstand, tilgår I/O, indlæser segmentregistre mv.
- Specielle instruktioner: atomare operationer til synkronisering, krypteringsinstruktioner, mm.
Eksekvering i mikroarkitekturen
En instruktion går typisk gennem flere logiske faser i CPU'en:
- Fetch: Hent instruktionens bytes fra hukommelse.
- Decode: Bestem opcode og operandfelter.
- Operand-fremskaffelse: Læs registre eller adresser hukommelse.
- Execute: Udfør selve operationen (ALU, FPU, load/store mv.).
- Write-back: Skriv resultat tilbage til register eller hukommelse.
Moderne CPU'er bruger pipelining, superskalar eksekvering, out-of-order execution og spekulativ udførelse for at øge gennemløb. Disse teknikker introducerer begreber som data- og kontrolhazarder, som håndteres med teknikere som forwarding, branch prediction og register renaming.
Nogle kompleksere arkitekturer bruger mikrokode til at implementere komplekse instruktioner, mens andre overlader kompleksiteten til kompileren (RISC-princippet). VLIW flytter ansvar for parallel planlægning til kompileren.
Programmering, repræsentation og værktøjer
Instruktioner skrives sjældent direkte som binær maskinkode af programmører. Typiske arbejdsgange er:
- Assemblersprog: Menneskelæselig notation for hver instruktion, oversættes til maskinkode af en assembler.
- Compilere: Oversætter højere niveau sprog til assembler/maskinkode og optimerer instruktioner for arkitekturen.
Værktøjer som disassemblere, linkere og debuggere arbejder med instruktioner i forskellige repræsentationer (binær, hex, assembly). Endianness (little/big endian) bestemmer byte-orden i hukommelsen, men påvirker ikke selve bitmønsteret i opcode-felter—dog ændrer det, hvordan bytes præsenteres i hukommelsesdump.
Sikkerhed, privilegier og undtagelser
Nogle instruktioner kan kun udføres i en højere privilegeret tilstand (kernel/privileged mode). Forsøg på at udføre sådanne instruktioner i bruger-tilstand fører typisk til en undtagelse eller trap. Interrupts, traps og undtagelser er mekanismer hvor eksterne hændelser eller fejl ændrer normal instruktionsudførelse og overgiver kontrol til operativsystemet.
Generel betydning af "instruktion"
Udover den snævre betydning som et enkelt processoroperationselement i et instruktionssæt, kan betegnelsen instruktion også bruges bredere om enhver enhed i et eksekverbart program: en kommando i et script, en bytekode-instruktion i en virtuel maskine eller et element i en pipeline af operationer. Den grundlæggende idé er den samme: en instruktion beskriver en afgrænset operation, der på et tidspunkt udføres af et system.
Relaterede sider
Spørgsmål og svar
Spørgsmål: Hvad er en instruktion i datalogi?
A: En instruktion inden for datalogi er en enkelt operation i en processor, som er defineret af processorens instruktionssæt.
Spørgsmål: Hvor lange kan instruktioner være?
Svar: Størrelsen eller længden af en instruktion varierer meget, fra så lidt som 4 bit i nogle mikrocontrollere til mange multipla bytes i nogle VLIW-systemer (Very Long Instruction Word). De fleste moderne processorer, der anvendes i personlige computere, mainframes og supercomputere, har instruktionsstørrelser på mellem 16 og 64 bit. I nogle arkitekturer, især RISC-computere (RISC), har instruktionerne en fast længde, der typisk svarer til den pågældende arkitekturs ordstørrelse.
Spørgsmål: Hvad indeholder en instruktion?
Svar: En instruktion indeholder en opkode, der angiver den operation, der skal udføres, f.eks. "tilføj indholdet af hukommelsen til registeret", og nul eller flere operandspecifikatorer, der kan angive registre, hukommelsesplaceringer eller bogstavelige data. Operandspecifikatorerne kan have adresseringstilstande, der bestemmer deres betydning, eller de kan være i faste felter. I VLIW-arkitekturer specificeres flere samtidige operationer og operander i en enkelt instruktion.
Spørgsmål: Hvordan specificeres instruktioner normalt?
A: Instruktioner specificeres sjældent ved hjælp af deres maskinkodeform; de kan specificeres af programmører ved hjælp af et assemblagesprog eller mere almindeligt genereres af compilere.
Spørgsmål: Er der en anden definition af "instruktion"?
A: Ja, der findes en anden mere generel definition af en "instruktion", som ikke kun vedrører processorinstruktionssættet, som er enhver repræsentation af et element i et eksekverbart computerprogram.
Spørgsmål: Er alle instruktioner lige store?
A: Nej, størrelsen eller længden af instruktioner varierer meget afhængigt af den anvendte processortype, fra 4 bit op til flere bytes for VLIW-systemer, hvor de fleste moderne processorer har størrelser på mellem 16 og 64 bit, mens RISC-arkitekturer typisk har instruktioner med en fast længde svarende til den pågældende arkitekturs ordstørrelse.
Søge