Juhiste tüübid assemblerkeeles: täielik juhend

Viimane uuendus: Mai 7 2025
  • Assemblerkeel korraldab oma juhised eesmärgi järgi: edastus, arvutamine, voolu juhtimine ja palju muud.
  • Iga käsk koosneb opkoodist ja operandidest, millel on arhitektuurist olenevalt erinevad vormingud.
  • Andmetele juurdepääsuks on mitu adresseerimisviisi, näiteks kohene, otsene ja kaudne.

Assembler Masinkeel ja käskude vorming

Assemblerkeel on olnud tarkvaraarenduse üks alustalasid arvutite tekkimisest peale. Kuigi tänapäeval domineerivad kõrgetasemelised programmeerimiskeeled, on assembler endiselt laialdaselt kasutatav ja asjakohane keskkondades, kus riistvara juhtimine, optimeerimine või ressursipiirangud on esmatähtsad.

Selles artiklis süveneme assemblerkeele käskude tüüpidesse, analüüsides nende struktuuri, eesmärki, adresseerimisrežiime ja seda, kuidas need on erinevates arhitektuurides korraldatud. Samuti leiate näiteid, vorminguid ja põhjaliku ülevaate, mis võimaldab teil täielikult mõista nende käskude taga olevat loogikat, mis toimivad riistvaraga väga tihedalt seotud.

Mis on assemblerkeeles käsk?

Assemblerkäsk on käsk, millest protsessor saab otse aru (kui assemblerprogramm on selle masinkoodiks tõlginud). Igal käsul on kindel eesmärk ja see koosneb tavaliselt mnemoonikast, mis esindab operatsiooni, ja ühest või mitmest operandist , mis näitavad, kust andmed võetakse ja/või kuhu tulemused salvestatakse.

Need juhised sõltuvad suuresti protsessori arhitektuurist, seega on igal protsessori tüübil (olgu see siis x86, ARM, MIPS jne) oma juhiste komplekt, millel on kindel süntaks ja võimalused.

Juhise struktuur

Juhised koosnevad tavaliselt kahest osast:

  • Operatsioonikood (opkood): Näitab teostatavat toimingut, näiteks andmete lisamine, teisaldamine, võrdlemine jne.

Operandid annavad operatsiooni sooritamiseks vajaliku teabe ning neid saab salvestada registritesse, mällu või konstantidena. Mitte kõik käsud ei vaja operande ja mõnel juhul võivad need olla käsus kaudselt sisalduvad või salvestatud eelnevalt määratletud registritesse.

Assemblerkeele juhiste tüübid

Sõltuvalt funktsionaalsusest, mida nad programmis täidavad, saab assemblerkeele juhiseid jagada mitmeks rühmaks. Kõige asjakohasemad on üksikasjalikumalt kirjeldatud allpool:

1. Andmeedastuse juhised

Need käsud võimaldavad andmeid ühest kohast teise kopeerida ilma nende sisu allikal muutmata. Need on olulised teabe liigutamiseks registrite, mälu ja välisseadmete vahel.

  Masinõpe JavaScriptiga: praktiline juhend, eelised ja teegid

Mõned selle grupi kõige levinumad juhised on järgmised:

  • MOV: Kopeerib ühe operandi sisu teise. Näiteks MOV AX, BX Kopeeri BX sisu AX-i.
  • MOVS / MOVSB ​​​​/ MOVSW: Liigutab stringid lähteaadressilt (SI) sihtaadressilt (DI), automatiseerides edastusprotsessi.
  • LODS / LODSB / LODSW: Laadib SI-registri poolt näidatud aadressilt väärtuse akumulaatorisse (AL või AX).
  • LOE: Laadib väärtuse asemel efektiivse aadressi. Kasulik muutuja või struktuuri aadressi saamiseks.

2. Aku juhised

Pinu on LIFO (viimane sisse, esimene välja) struktuur, mida kasutatakse andmete ajutiseks salvestamiseks, parameetrite edastamiseks või täitmiskonteksti salvestamiseks.

  • PUSH: Salvestab väärtuse pinumällu, vähendades SP-pointerit.
  • POP: Tagastab pinu viimase salvestatud väärtuse, suurendades SP-d.
  • LÜKKA / POPF: Nad salvestavad ja hangivad pinu protsessori lippude oleku.

3. Aritmeetilised ja loogilised juhised

Need võimaldavad bittidega arvutusi ja toiminguid teha. Need käsud on olulised numbriliste andmetega manipuleerimiseks ja programmi voos otsuste langetamiseks.

Kõige enamkasutatavate hulgast leiame:

  • LISA / VÄLJA: Liitmine ja lahutamine.
  • MUL / IMUL: Binaarsed korrutused.
  • DIV / IDIV: Jagamine (täisarv või märgiga).
  • JA / VÕI / XVÕI / EI: Bitipõhised loogilised tehted.
  • SHL / SHR / ROL / ROR: Biti nihutamine ja pööramine.

4. Voolu juhtimise juhised

Need võimaldavad teil muuta programmi täitmisjärjestust , lisades hüppeid või tingimuslikke ja tingimusteta kõnesid teistele käskudele.

  • JMP: Hüppab programmis tingimusteta teisele aadressile.
  • HELISTA / TAGASIKELLUTA: Kutsuge alamrutiini ja naaske.
  • JE/JNE/JG/JL/JZ/JNZ: Tingimuslikud hüpped, neid täidetakse teatud tingimuste täitmisel (pärast võrdlemist).

5. Sisend-/väljundkäsud (I/O)

Need võimaldavad protsessori ja väliste seadmete vahelist suhtlust. Need käsud võimaldavad andmeid portidesse (riistvarasse) lugeda ja sealt kirjutada.

  • IN: Loeb andmeid sisendportist.
  • OUT: Saadab andmed väljundporti.

6. Ujukomakäsud

Paljudel protsessoritel on matemaatilised kaasprotsessorid (või spetsiaalsed käsud), mis on pühendatud kümnendarvude (ujukomaarvude) töötlemisele. Need käsud võimaldavad selliseid toiminguid nagu:

  • Reaalarvude liitmine, lahutamine, korrutamine ja jagamine.
  • Trigonomeetrilised tehted (siinus, koosinus, tangens).
  • Logaritmilised, eksponentsiaalsed ja juurtehted.
  Täielik juhend IoT-andurite ühendamiseks n8n-iga

Need juhised vastavad numbrilise täpsuse osas tavaliselt IEEE 754 standardile.

Aadressirežiimid

Käskude disaini põhiosa on see, kuidas operandide asukohta tuvastatakse. Aadressirežiimid määravad, kuidas protsessor andmetele juurde pääseb.

1. Kohene tegelemine

Andmed on otse käsklusesse lisatud. See on kiire, kuid see ei võimalda väärtusi muuta ilma käsklust muutmata.

MOV AX, 5

2. Otsene adresseerimine

Andmeid sisaldav mäluaadress on selgesõnaliselt määratud.

MOV AX, 

3. Kaudne adresseerimine

Efektiivne aadress saadakse kirje sisust. Väga paindlik ja kasutatakse struktuuride ja lingitud loendite puhul.

MOV AX, 

4. Indekseeritud adresseerimine

Aadress arvutatakse baasi ja indeksi liitmise teel (näiteks massiivide läbimiseks). See kasutab spetsiaalseid registreid, näiteks SI, DI või baasi + nihke registreid.

MOV AX, 

Juhiste vormingud: erinevad tüübid sõltuvalt arhitektuurist

Käsu struktuur võib arhitektuurist olenevalt erineda. Levinumad vormingud on järgmised:

4-suunaline formaat

See sisaldab kahte operandi, tulemuse asukohta ja järgmise käsu aadressi. Oma keerukuse tõttu on see nüüdseks aegunud .

3-suunaline formaat

See määrab kaks operandi ja sihtkoha aadressi. See on tänapäevastes RISC arhitektuurides tavaline.

2-suunaline formaat

Kasutage lähteoperandi ja sihtoperandi (sihtkoht võib samuti väärtust anda). Populaarne x86 ja teistes CISC arhitektuurides.

Ühesuunaline formaat

Määratud on ainult üks operand; teist eeldatakse akumulaatorina. Levinud vanemate protsessorite ja lihtsamate süsteemide puhul.

0-aadressi formaat (virnapõhine)

Toimingud kasutavad pinumälu operandide ja tulemuste toomiseks ja salvestamiseks. Väga tõhus pinupõhiste masinate, näiteks mõnede programmeeritavate kalkulaatorite puhul.

Makrokäsud ja pseudo-opkoodid

Tootlikkuse parandamiseks pakuvad paljud assemblerid makrokäsklusi , mis laiendavad ühe rea mitmeks tegelikuks käsuks. Need on kasulikud keerukate mustrite kordamise vältimiseks või kõrgetasemeliste struktuuride, näiteks tsüklite või tingimuslausete loomiseks.

osa pseudo-opkoodid Need on juhised, mille assembler tõlgib sisemiselt reaalseks juhiste jadaks. Näiteks NOP (ilma operatsioonita) saab tõlkida järgmiselt XCHG AX, AX x86 protsessoril.

  Regulaaravaldised (RegEx): täielik juhend ja näited

Assembleri direktiivid

Direktiivid ( nimetatakse ka pseudooperatsioonideks ) ei ole ranges mõttes käsud. Nende eesmärk on juhtida assemblerprotsessi, määratleda andmeid, koodilõike, makrosid, kompileerimistingimusi jne.

Levinud näited hõlmavad järgmist:

  • .andmed / .kood: Need tähistavad andmete või koodi sektsiooni.
  • .org: Määrab aadressi, kust assamblee algab.
  • .equ: Defineerib sümboolsed konstandid.

Assemblerkeele kasutusjuhud

Vaatamata kõrgetasemeliste keelte esiletõusule on assemblerkeel mitmes valdkonnas endiselt võtmetähtsusega:

  • Manussüsteemide ja mikrokontrollerite arendamine.
  • Draiverite, alglaadurite ja BIOS-i programmeerimine.
  • Äärmuslik optimeerimine sellistes rakendustes nagu videomängud või krüptograafia.
  • Pöördprojekteerimine, silumine ja madala taseme häkkimine.

Lisaks on assemblerkeele õpetamisel endiselt oluline koht arvutiteaduse ja elektroonika kraadiõppes, kuna see annab sügava arusaama protsessori toimimisest, andmete salvestamisest ja töötlemisest ning käskude täitmisest binaartasandil.

Igasuguste assambleejuhiste, nende struktuuri, funktsionaalsuse ja adresseerimisrežiimide mõistmine annab kindla aluse igale programmeerijale, kes soovib süveneda madala taseme programmeerimisse või mõista, kuidas kõrgetasemelised keeled lõpuks masinkoodiks tõlgitakse. Kuigi selle kasutamine on muutunud spetsiifilisemaks, on see endiselt oluline tööriist mitmes tarkvara- ja süsteemiarenduse kriitilises valdkonnas.

montaaži keel
Seotud artikkel:
Kõik koostekeele kohta: mis see on ja kuidas see töötab