Typer af instruktioner i assemblersprog: en komplet guide

Sidste ændring: Maj 7 2025
Forfatter: TecnoDigital
  • Assemblersprog organiserer sine instruktioner efter formål: overførsel, beregning, flowkontrol og mere.
  • Hver instruktion består af en opcode og operander med forskellige formater afhængigt af arkitekturen.
  • Der er flere adresseringsmetoder til at få adgang til data, såsom umiddelbar, direkte og indirekte.

assembler Maskinsprog og instruktionsformat

Assemblersprog har været en af ​​​​grundpillerne i softwareudvikling siden computerens begyndelse. Selvom avancerede sprog dominerer scenen i dag, er assembler stadig meget udbredt og relevant i miljøer, hvor hardwarekontrol, optimering eller ressourcebegrænsninger er en prioritet.

I denne artikel vil vi dykke ned i de forskellige typer af instruktioner i assemblersprog, analysere deres struktur, formål, adresseringstilstande og hvordan de er organiseret på tværs af forskellige arkitekturer. Du finder også eksempler, formater og en omfattende oversigt, der giver dig mulighed for fuldt ud at forstå logikken bag disse instruktioner, som fungerer meget tæt sammen med hardwaren.

Hvad er en instruktion i assemblersprog?

En assemblerinstruktion er en kommando, som CPU'en kan forstå direkte (når den er oversat til maskinkode af et assemblerprogram). Hver instruktion har et specifikt formål og er normalt sammensat af en huskeregel , der repræsenterer operationen, og en eller flere operander , der angiver, hvor dataene hentes, og/eller hvor resultaterne gemmes.

Disse instruktioner er meget afhængige af processorarkitekturen, så hver type CPU (uanset om det er x86, ARM, MIPS osv.) har sit eget sæt instruktioner med specifik syntaks og funktioner.

Struktur af en instruktion

Instruktioner består normalt af to dele:

  • Operationskode (opcode): Angiver den handling, der skal udføres, såsom at tilføje, flytte data, sammenligne osv.

Operander leverer den information, der er nødvendig for at udføre operationen, og kan gemmes i registre, hukommelse eller være konstanter. Ikke alle instruktioner kræver operander, og i nogle tilfælde kan disse være implicitte i instruktionen eller gemmes i foruddefinerede registre.

Typer af instruktioner i assemblersprog

Afhængigt af den funktionalitet, de udfører i et program, kan instruktioner i assemblersprog klassificeres i flere grupper. De mest relevante er beskrevet nedenfor:

1. Instruktioner for dataoverførsel

Disse instruktioner gør det muligt at kopiere data fra et sted til et andet uden at ændre indholdet ved kilden. De er afgørende for at flytte information mellem registre, hukommelse og periferiudstyr.

  Redux JS: Den ultimative guide til at forstå og mestre Redux

Nogle af de mest almindelige instruktioner i denne gruppe er:

  • MOV: Kopierer indholdet af én operand til en anden. For eksempel, MOV AX, BX Kopier indholdet af BX til AX.
  • MOVS / MOVSB ​​​​/ MOVSW: Flytter strenge fra en kildeadresse (SI) til en destinationsadresse (DI) og automatiserer dermed overførselsprocessen.
  • LODS / LODSB / LODSW: Indlæser en værdi fra den adresse, der er angivet af SI-registeret, i akkumulatoren (AL eller AX).
  • LÆSE: Indlæser en effektiv adresse i stedet for værdien. Nyttig til at hente adressen på en variabel eller struktur.

2. Batterivejledning

Stakken er en LIFO-struktur (sidst ind, først ud), der bruges til midlertidigt at gemme data, overføre parametre eller gemme udførelseskonteksten.

  • SKUBBE: Gemmer en værdi på stakken og reducerer SP-pointeren.
  • POP: Henter den seneste værdi gemt på stakken, og øger SP.
  • SKUB / POPF: De gemmer og henter status for CPU-flag på stakken.

3. Aritmetiske og logiske instruktioner

De tillader udførelse af beregninger og operationer på bits. Disse instruktioner er afgørende for at manipulere numeriske data og træffe beslutninger i programflowet.

Blandt de mest brugte finder vi:

  • TILFØJ / SUB: Addition og subtraktion.
  • MUL / IMUL: Binære multiplikationer.
  • DIV / IDIV: Division (heltal eller med fortegn).
  • OG / ELLER / XELLER / IKKE: Bitvise logiske operationer.
  • SHL / SHR / ROL / ROR: Bitskift og rotationer.

4. Instruktioner til flowkontrol

De giver dig mulighed for at ændre programmets udførelsessekvens ved at introducere hop eller betingede og ubetingede kald til andre instruktioner.

  • JMP: Springer ubetinget til en anden adresse i programmet.
  • RING / RET: Kald til en subrutine og returner.
  • JE/JNE/JG/JL/JZ/JNZ: Betingede spring, de udføres, hvis visse betingelser er opfyldt (efter en sammenligning).

5. Instruktioner for input/output (I/O)

De muliggør kommunikation mellem processoren og eksterne enheder. Disse instruktioner gør det muligt at læse og skrive data til/fra porte (hardware).

  • I: Læser data fra en inputport.
  • UD: Sender data til en outputport.

6. Flydende komma-instruktioner

Mange CPU'er har matematiske coprocessorer (eller særlige instruktioner) dedikeret til at arbejde med decimaltal (flydende kommatal). Disse instruktioner tillader operationer som:

  • Addition, subtraktion, multiplikation og division af reelle tal.
  • Trigonometriske operationer (sinus, cosinus, tangent).
  • Logaritmiske, eksponentielle og rodoperationer.
  Hvad er en webmasters pligter?

Disse instruktioner overholder typisk IEEE 754-standarden for numerisk præcision.

Adresseringstilstande

En fundamental del af instruktionsdesign er, hvordan operandernes placering identificeres. Adresseringstilstande definerer, hvordan CPU'en tilgår data.

1. Øjeblikkelig adressering

Dataene er inkluderet direkte i instruktionen. Det er hurtigt, men det tillader ikke at ændre værdier uden at ændre instruktionen.

MOV AX, 5

2. Direkte adressering

Hukommelsesadressen, der indeholder dataene, er eksplicit angivet.

MOV AX, 

3. Indirekte adressering

Den effektive adresse hentes fra indholdet af en post. Meget fleksibel og bruges til strukturer og linkede lister.

MOV AX, 

4. Indekseret adressering

Adressen beregnes ved at tilføje en base og et indeks (for eksempel for at gennemløbe arrays). Den bruger specielle registre såsom SI, DI eller base + offset-registre.

MOV AX, 

Instruktionsformater: forskellige typer afhængigt af arkitekturen

Strukturen af ​​en instruktion kan variere afhængigt af arkitekturen. Almindelige formater inkluderer:

4-vejsformat

Den indeholder to operander, en resultatplacering og adressen på den næste instruktion. Den er nu forældet på grund af dens kompleksitet.

3-vejsformat

Den specificerer to operander og en destinationsadresse. Det er almindeligt i moderne RISC-arkitekturer.

2-vejsformat

Brug en kildeoperand og en destinationsoperand (destinationen kan også bidrage med værdi). Populær på x86 og andre CISC-arkitekturer.

1-vejsformat

Kun én operand er angivet; den anden antages at være akkumulatoren. Almindelig i ældre processorer og simple systemer.

0-adresseformat (stakbaseret)

Operationerne bruger stakken til at hente og gemme operander og resultater. Meget effektivt for stakbaserede maskiner, såsom nogle programmerbare regnemaskiner.

Makroinstruktioner og pseudo-opcodes

For at forbedre produktiviteten tilbyder mange assemblere makroinstruktioner , som udvider en enkelt linje til flere faktiske instruktioner. Disse er nyttige til at undgå gentagelse af komplekse mønstre eller til at oprette strukturer på højt niveau såsom løkker eller betingede sætninger.

masse pseudo-opkoder Det er instruktioner, som assembleren internt oversætter til en reel instruktionerækkefølge. For eksempel, NOP (ingen operation) kan oversættes til XCHG AX, AX på x86 CPU.

  Komplet guide til Visual Studio-abonnementer

Assembler-direktiver

Direktiver ( også kaldet pseudo-operationer ) er ikke instruktioner i ordets egentlige forstand. De tjener til at styre assembly-processen, definere data, kodeafsnit, makroer, kompileringsbetingelser osv.

Almindelige eksempler omfatter:

  • .data / .kode: De angiver data- eller kodeafsnittet.
  • .org: Angiver den adresse, hvorfra samlingen starter.
  • .ligning: Definerer symbolske konstanter.

Brugssager til assemblersprog

Trods fremkomsten af ​​højniveausprog er assemblersprog fortsat nøglen på flere områder:

  • Udvikling af indlejrede systemer og mikrocontrollere.
  • Programmering af drivere, bootloadere og BIOS.
  • Ekstrem optimering i applikationer som videospil eller kryptografi.
  • Reverse engineering, debugging og lavniveau-hacking.

Derudover indtager træning i assemblersprog stadig en vigtig plads inden for datalogi og elektronik, da det giver en dyb forståelse af, hvordan en processor fungerer, hvordan data lagres og manipuleres, og hvordan instruktioner udføres på binært niveau.

Forståelse af alle typer monteringsinstruktioner, deres struktur, funktionalitet og adresseringstilstande giver et solidt fundament for enhver programmør, der ønsker at fordybe sig i lavniveauprogrammering eller forstå, hvordan højniveausprog i sidste ende oversættes til maskinkode. Selvom brugen er blevet mere specifik, er det fortsat et vigtigt værktøj inden for flere kritiske områder af software- og systemudvikling.

samlesprog
Relateret artikel:
Alt om Assembly Language: Hvad det er, og hvordan det virker