Maskinkode

Maskinkode er et computerprogram, der er skrevet i maskinsprog. Det bruger instruktionssættet for en bestemt computerarkitektur. Det er normalt skrevet i binær form. Maskinkode er det laveste niveau af software. Andre programmeringssprog oversættes til maskinkode, så computeren kan afvikle dem.

En instruktion fortæller processen, hvilken operation den skal udføre. Hver instruktion består af en opcode (operationskode) og en eller flere operander. Operanderne er normalt hukommelsesadresser eller data. Et instruktionssæt er en liste over de opkoder, der er tilgængelige for en computer. Maskinkode er det, som samlekode og andre programmeringssprog kompileres til eller fortolkes som.

Programbuildere omdanner kode til et andet sprog eller maskinkode. Maskinkode kaldes undertiden native kode. Dette bruges, når man taler om ting, der kun fungerer på nogle computere.

Skrivning af maskinkode

Maskinkode kan skrives i forskellige former:

  • Brug af en række kontakter. Dette genererer en sekvens af 1 og 0. Dette blev brugt i de tidlige dage af computerne. Siden 1970'erne er det ikke længere blevet brugt.
  • Brug af en Hex-editor. Dette gør det muligt at bruge opkoder i stedet for kommandonummeret.
  • Brug af en assembler. Assembler-sprog er enklere end opkoder. Deres syntaks er lettere at forstå end maskinsprog, men sværere end højniveausprog. Assembleren oversætter selv kildekoden til maskinkode.
  • Ved at bruge et programmeringssprog på højt niveau kan programmerne bruge kode, der er lettere at læse og skrive. Disse programmer oversættes til maskinkode. Oversættelsen kan ske i mange trin. Java-programmer optimeres først til bytekode. Derefter oversættes det til maskinsprog, når det bruges.
Frontpanel på en tidlig minicomputer med kontakter til indtastning af maskinkodeZoom
Frontpanel på en tidlig minicomputer med kontakter til indtastning af maskinkode

Typiske instruktioner i maskinkode

Der findes mange slags instruktioner, som normalt findes i et instruktionssæt:

  • Aritmetiske operationer: Addition, subtraktion, multiplikation, division.
  • Logiske operationer: Konjunktion, disjunktion, negation.
  • Operationer, der virker på enkelte bits: Skift af bits til venstre eller højre.
  • Operationer, der virker på hukommelsen: kopiering af en værdi fra et register til et andet.
  • Operationer, der sammenligner to værdier: større end, mindre end, lig med.
  • Operationer, der kombinerer andre operationer: addere, sammenligne og kopiere, hvis det er lig med en værdi (som én operation), springe til et punkt i programmet, hvis et register er nul.
  • Operationer, der virker på programflowet: spring til en bestemt adresse.
  • Operationer, der konverterer datatyper: f.eks. konverter et 32-bit heltal til et 64-bit heltal, konverter en floating point-værdi til et heltal (ved at afkortning).

Mange moderne processorer bruger mikrokode til nogle af kommandoerne. Mere komplekse kommandoer har en tendens til at bruge den. Dette sker ofte med CISC-arkitekturer.

Instruktioner

Hver processor eller processorfamilie har sit eget instruktionssæt. Instruktioner er mønstre af bits, der svarer til forskellige kommandoer, som kan gives til maskinen. Instruktionsmængden er således specifik for en klasse af processorer, der (for det meste) anvender den samme arkitektur.

Nyere processordesigns indeholder ofte alle instruktionerne fra en forgænger og kan tilføje yderligere instruktioner. Nogle gange vil et nyere design afbryde eller ændre betydningen af en instruktionskode (typisk fordi den er nødvendig til nye formål), hvilket påvirker kodekompatibiliteten; selv næsten fuldstændig kompatible processorer kan udvise en lidt anderledes adfærd for nogle instruktioner, men det er sjældent et problem.

Systemerne kan også afvige fra hinanden på andre punkter, f.eks. med hensyn til hukommelse, operativsystemer eller perifere enheder. Da et program normalt er afhængigt af sådanne faktorer, vil forskellige systemer typisk ikke køre den samme maskinkode, selv når der anvendes den samme type processor.

De fleste instruktioner har et eller flere opkodefelter. De angiver den grundlæggende instruktionstype. Andre felter kan angive operandernes type, adresseringsmåde osv. Der kan også være særlige instruktioner, som er indeholdt i selve opkoden. Disse instruktioner kaldes immediates.

Processordesigns kan være anderledes på andre måder. Forskellige instruktioner kan have forskellige længder. De kan også have den samme længde. Hvis alle instruktioner har samme længde, kan det forenkle designet.

Eksempel

MIPS-arkitekturen har instruktioner, der er 32 bit lange. Dette afsnit indeholder eksempler på kode. Den generelle type instruktion er i op-feltet (operation). Det er de højeste 6 bit. J-type (jump) og I-type (immediate) instruktioner er fuldt ud angivet ved op. R-type (register)-instruktioner omfatter feltet funct. Det bestemmer den nøjagtige operation af koden. De felter, der anvendes i disse typer, er:

      6 5 5 5 5 5 5 5 6 bits [ op | rs | rt | rd | rd |shamt| funct] R-type [ op | rs | rt | address/immediate] I-type [ op | target address ] J-type

rs, rt og rd angiver registeroperander. shamt angiver et forskydningsbeløb. Adresse- eller immediate-felterne indeholder en operand direkte.

Eksempel: Tilføj registrene 1 og 2. Placer resultatet i register 6. Det er kodet:

[ op | rs | rt | rd | rd |shamt| funct] 0 1 1 2 6 0 32 decimal 000000 00001 00010 00010 00110 00000 100000 100000 binært

Indlæs en værdi i register 8. Tag den fra hukommelsescellen 68 celler efter den placering, der er angivet i register 3:

[ op | rs | rt | address/immediate] 35 3 8 68 decimal 100011 00011 01000 00000 00000 00001 000100 binært

Spring til adressen 1024:

[ op | måladresse ] 2 1024 decimal 000010 00000 00000 00000 00000 00000 10000 000000 binært

Relaterede sider

  • Binært talsystem
  • Kvantecomputere
  • Instruktionssæt
  • Computer med reduceret instruktionssæt

Spørgsmål og svar

Q: Hvad er maskinkode?


A: Maskinkode er et computerprogram skrevet i maskinsprog, der bruger instruktionssættet for en bestemt computerarkitektur og normalt er skrevet binært.

Q: Hvad er det laveste niveau af software?


A: Maskinkode er det laveste niveau af software.

Q: Hvordan udføres andre programmeringssprog af computere?


A: Andre programmeringssprog oversættes til maskinkode, som computeren kan udføre.

Q: Hvad består en instruktion i maskinkode af?


A: En instruktion i maskinkode består af en opcode (operationskode) og operand(er). Operanderne er som regel hukommelsesadresser eller data.

Q: Hvad er et instruktionssæt?


A: Et instruktionssæt er en liste over de operationskoder, der er tilgængelige for en computer.

Q: Hvad gør programudviklere med kode?


A: Programudviklere omdanner kode til et andet sprog eller maskinkode.

Q: Hvad er et andet navn for maskinkode?


A: Maskinkode kaldes nogle gange native code, når man taler om ting, der kun virker på nogle computere.

AlegsaOnline.com - 2020 / 2023 - License CC3