Sklopni jezik (ali sestavljalnik) je programski jezik nizke ravni za računalnik ali drugo programljivo strojno opremo, v katerem obstaja povezava med jezikom in arhitekturo strojnih kodnih ukazov. Vsak strojno usmerjen jezik (v strokovni terminologiji - "zbiralec") se nanaša na določeno računalniško arhitekturo. Nasprotno, večina programskih jezikov na visoki ravni je večplastna, vendar zahtevajo interpretacijo ali kompilacijo. Kodo, usmerjeno v platformo, lahko imenujemo tudi simbolni jezik ali niz navodil, ki jih neposredno izvaja osrednji procesor računalnika. Vsak program, ki ga izvaja procesor, je sestavljen iz niza navodil. Strojna koda je po definiciji najnižja raven programiranja, ki jo programer vidi.
Uporaba
Za številne operacije mora en ali več operandov izdelati popolno navodilo in mnogi sestavljavci lahko sprejmejo izraze števil in konstant, pa tudi registre in oznake operandov To osvobodi strokovnjaka pri programiranju v jeziku strojne kode iz dolgočasnih ponavljajočih se izračunov. Odvisno od arhitekture se lahko ti elementi kombinirajo tudi za specifična navodila ali načini naslavljanja z uporabo premikov ali drugih podatkov ter fiksnih naslovov. Mnogi "zbiralci" ponujajo dodatne mehanizme za lažji razvoj programa, nadzor nad procesom ustvarjanja in vzdrževanja odpravljanja napak.
Zgodovinska perspektiva
Prvi jezik sestavljavca je leta 1947 razvila Kathleen Booth za ARC2 na Univerzi Birkbeck v Londonu v procesu dela z Johnom von Neumannom in Hermannom Goldstinom na Inštitutu za napredne študije. SOAP (Symbolic Optimal Assembly Program) je bil jezik montažnega sestavljalnika za IBM 650 PC, ki ga je leta 1955 izdelal Stan Poul. V preteklosti je bilo veliko število programskih rešitev napisanih v zbirniku. OS je bila napisana izključno v tem jeziku pred uvedbo Burroughs MCP (1961), ki je bila napisana v jeziku izvršnih sistemov problemski jezik (ESPOL). Veliko komercialnih aplikacij je bilo napisanih v strojno osredotočenem jeziku, vključno z veliko količino IBM-ovega osrednjega računalnika, ki so ga ustvarili velikani IT. COBOL in FORTRAN sta sčasoma izpodrinila veliko dela, čeprav so mnoge velike organizacije v devetdesetih letih prejšnjega stoletja ohranile infrastrukturne aplikacije aplikatorjev.
Večina zgodnjih mikroračunalnikov je temeljila na ročnem kodirnem zborniku, vključno z večino aplikacij OS in velikih aplikacij. To je posledica dejstva, da so imeli ti stroji resne omejitve glede virov, naložili individualno arhitekturo pomnilnika in zaslona ter zagotovili omejene sistemske storitve z napakami. Bolj pomembno je bilo pomanjkanje prvovrstnih visokih nivojev prevajalnikov jezika, primernega za uporabo v mikroračunalniku, kar je zapletlo usposabljanje strojne kode.
Področje uporabe
Zbiranje jezikov odpravlja večino problematičnega, dolgotrajnega in delovno intenzivnega programiranja na sklopih prve generacije, ki so potrebni na najzgodnejših računalnikih. To je toosvobodi programerje iz rutine v obliki zapomnitve številskih kod in izračunavanja naslovov. V začetnih fazah so se zbiralci široko uporabljali za vse vrste programiranja. Do konca osemdesetih let pa je bila njihova uporaba v veliki meri nadomeščena z jeziki višje ravni, ki iščejo povečano produktivno programiranje. Danes se jezik za sestavljanje uporablja za neposredno manipulacijo s strojno opremo, dostop do specializiranih navodil za procesor ali za reševanje kritičnih težav z zmogljivostjo. Tipične aplikacije so gonilniki naprav, vgrajeni sistemi nizke ravni in nastavitve v realnem času.
Primeri uporabe
Tipični primeri večjih programov v jeziku sestavljenega jezika so operacijski sistemi IBM DOS DOS, prevajalnik Turbo Pascal in zgodnje aplikacije, kot je program za preglednice Lotus 1-2-3.
Strojno usmerjen jezik je glavni razvojni jezik mnogih priljubljenih domačih osebnih računalnikov iz osemdesetih in devetdesetih let (kot so MSX, Sinclair ZX Spectrum, Commodore 64 Commodore Amiga in Atari ST). To je posledica dejstva, da so interpretirali BASIC pogovorna okna na teh sistemih, ki so zagotavljali nizko hitrost izvajanja in omejene možnosti za polno uporabo obstoječe opreme. Nekateri sistemi imajo celo integrirano razvojno okolje (IDE) z visoko razvitimi orodji za razhroščevanje in makro objekti. Nekateri prevajalci, ki so na voljo Radio Shacku TRS-80 in njegovi nasledniki, so lahko združili vgrajeni vir z visoko stopnjo programov. Po kompilaciji je vgrajeni asembler ustvaril vgrajeno binarno kodo.
Strojna koda za lutke. Terminologija
Program za sestavljanje izdeluje kode transakcij s prevajanjem kombinacij mnemoničnih in skladenjskih pravil za operacije in načini naslavljanja v njihove numerične ekvivalente. Ta predstavitev običajno vključuje operacijsko kodo, kot tudi druge kontrolne bite in podatke. Assembler prav tako izračuna stalne izraze in definira imena znakov za mesta pomnilnika in druge predmete. Ukazi za sestavljanje stroja lahko izvajajo tudi nekatere preproste vrste optimizacije, odvisno od niza ukazov. Eden od posebnih primerov tega so lahko priljubljeni "zbiralci" x86 različnih ponudnikov. Večina jih lahko na zahtevo opravi nadomestne ukaze v poljubnem številu prehodov. Prav tako lahko izvedejo preprosto prerazporeditev ali vstavljanje navodil, kot so nekateri zbiralci RISC, ki lahko pomagajo optimizirati inteligentno načrtovanje ukazov za maksimalno uporabo transporterja CPU. Podobno kot zgodnji programski jeziki, kot so Fortran, Algol, Cobol in Lisp, so zbiralci na voljo že od petdesetih let prejšnjega stoletja, kot tudi prva generacija besedilnih vmesnikov. Najprej so prišli kolektorji, saj so bili jeziki na visoki ravni veliko lažji za pisanje kot za prevajalnike. To je posledica dejstva, da se vsak mnemonik, kot tudi načini in operandi naslavljanja navodil prevedejo v numerične predstavitve vsakega posameznega navodila brez velikega konteksta ali analize. Obstajajo tudi številni razredi prevajalcev in polavtomatskih generatorjev kod z lastnostmi, podobnimi sklopom inkot na visoki ravni, in hitro kodo, morda, je eden od najbolj znanih primerov.
Število prehodov
Obstajata dve vrsti programiranja, ki temelji na številu prehodov skozi vir (s številom poskusov branja) za ustvarjanje predmetne datoteke.
Enkratni sestavljavci enkrat prečkajo izvorno kodo. Vsak znak, ki se uporablja za definiranje, bo zahteval napake na koncu predmetne kode. Večplastni sestavljavci ustvarijo tabele z vsemi znaki in njihovimi vrednostmi v prvih odlomkih in nato uporabijo tabelo v naslednjih odlomkih za generiranje kode. Začetni razlog za uporabo enosmernih kolektorjev je bila hitrost zbiranja - pogosto je bilo na drugem prehodu potrebno previjanje in ponovno branje vira programa na kaseti. Kasnejši računalniki z veliko količino pomnilnika (predvsem za shranjevanje diskov) so imeli prostor za izvedbo vseh potrebnih obdelav brez ponovnega branja. Prednost multi-pass sklopa je, da odsotnost napak vodi do dejstva, da proces vezave (ali prenos programa, če asembler neposredno ustvarja izvršljivo kodo), poteka hitreje.
Kaj je binarna koda?
Program, sestavljen v jeziku sestavljavca, je sestavljen iz niza mnemoničnih ukazov procesorja in meta-operaterjev (imenovanih direktive, psevdo-navodila in psevdo-operacije), komentarjev in podatkov. Navodila za montažni jezik običajno vsebujejo operacijo mnemonične kode. Sledi seznamu podatkov, argumentov ali parametrov. Sojih prevede sestavljalec v navodilih strojnega jezika, ki so naložena v pomnilnik in izvršena. Naslednje navodilo na primer pove, da procesor x86 /IA-32 premakne 8-bitno vrednost v register. Binarna koda za ta ukaz je 10110, sledi pa mu 3-bitni identifikator, za katerega se uporablja register. Identifikator AL je 000, zato naslednja koda nalaga register AL s podatki 01100001. Postavlja se vprašanje: kaj je binarna koda? To je sistem kodiranja, ki uporablja binarne številke "0" in "1" za prikaz črke, številke ali drugega znaka na računalniku ali drugi elektronski napravi. Primer strojne kode: 1011000001100001.
Tehnične značilnosti
Pretvorba jezika sestavljanja v strojno kodo je naloga sestavljanja. Obratni postopek se izvede z uporabo disassemblerja. Za razliko od jezikov na visoki ravni obstaja medsebojna ustreznost med množico preprostih upravljavcev sklopov in navodili za strojni jezik. V nekaterih primerih pa lahko asembler zagotovi psevdo-navodila (makre). Uporabljajo se za več navodil za strojni jezik, ki zagotavljajo običajno potrebne funkcije. Večina popolnih sestavljavcev ponuja tudi bogato makro vsebino, ki jo dobavitelji in programerji uporabljajo za ustvarjanje bolj kompleksnih kod in podatkovnih zaporedij.
Vsaka računalniška arhitektura ima svoj strojni jezik. Računalniki se razlikujejo po številu in vrstah operacij, ki jih podpirajo, v različnih velikostih in številu registrov, kot tudi pri predstavitvi podatkov v skladišču. V temmedtem ko je večina osebnih računalnikov za splošno uporabo zmožna opravljati skoraj enako funkcionalnost, se razlikujejo v načinih, ki jih uporabljajo. Ustrezni jeziki sestavljavcev odražajo te razlike. Za en niz ukazov, ki se običajno ustvarijo v različnih programih, lahko obstaja veliko množic mnemoničnih ali skladenjskih sklopov. V teh primerih je najbolj priljubljen praviloma tisti, ki ga proizvajalec zagotovi in uporablja v njegovi dokumentaciji.
Oblikovalski jezik
Obstaja veliko raznolikosti, kako avtorji zbiralnikov razvrščajo aplikacije in nomenklaturo, ki jo uporabljajo. Še posebej nekateri opisujejo vse, kar se razlikuje od stroja ali razširjeno mnemoniko kot psevdo-operacijo. Osnovni slovar zbirke je sestavljen iz sistema ukazov - treh glavnih vrst navodil, ki se uporabljajo za določanje operacij programa:
mnemonična opcode;
določanje podatkov;
Zbirniški vodnik.
Mnemonična opcode in razširjena mnemonika
Navodila, napisana v jeziku asemblerja, so osnovna, za razliko od jezikov na visoki ravni. Običajno je mnemonični (naključni simboli) simbol za eno izvedljivo kodno navodilo. Vsak ukaz običajno vsebuje operacijsko kodo plus nič ali več operandov. Večina ukazov se nanaša na eno ali dve vrednosti. Razširjene mnemotehnike se najpogosteje uporabljajo za specializirane priročnike z navodili za namene, ki niso znani iz imena priročnika. Mnogi procesorji na primer nimajo izrecnega navodila NOP, vendar imajovgrajeni algoritmi, ki se uporabljajo v ta namen.
Mnogi zbiralci podpirajo osnovne vgrajene makre, ki lahko ustvarijo dve ali več strojnih navodil.
Podatkovne direktive
Obstajajo navodila za identifikacijo elementov za shranjevanje podatkov in spremenljivk. Določajo vrsto podatkov, dolžino in poravnavo. Ta navodila lahko določijo razpoložljivost informacij za zunanje programe (zbrane ločeno) ali samo za aplikacijo, ki ima definiran oddelek za podatke. Nekateri sestavljavci jih opredeljujejo kot psevdo-operaterje.
Direktivi o montaži
Pravila montaže, imenovana tudi psevdokode ali psevdo-operacije, so ukazi, ki jih pripravi sestavljalec, in jih usmerjajo na operacije, ki niso navodila za sestavljanje. Direktive vplivajo na delo sestavljavca in lahko vplivajo na predmetno kodo, tabelo simbolov, seznam datotek in vrednost parametrov notranjega monterja. Včasih je izraz pseudocode rezerviran za direktive, ki ustvarjajo objektno kodo. Imena psevdo-operacij se pogosto začnejo na točki, ki se razlikuje od ukazov stroja. Druga pogosta uporaba psevdo-operacij je rezervacija področij shranjevanja podatkov za čas izvajanja in po možnosti inicializacija njihove vsebine na znane vrednosti.
Samo-dokumentirana koda
Sestavljalci simbolov omogočajo programerjem, da povezujejo poljubna imena (oznake ali simbole) s spominskimi celicami in različnimi konstantami. Pogosto se vsaki konstantni spremenljivki in spremenljivki dodeli lastno ime,tako se lahko navodila nanašajo na te lokacije po imenu, s čimer se olajša samokodiranje kode. V izvršljivi kodi ime kateregakoli podprograma ustreza njegovi vstopni točki, tako da lahko vsi klici podprogramov uporabljajo njegovo ime. V podprogramih so dodeljene oznake GOTO. Mnogi zbiralci podpirajo lokalne znake, ki so leksično različni od običajnih znakov. Sestavljavci, kot je NASM, zagotavljajo prilagodljivo upravljanje znakov, ki programerjem omogoča upravljanje različnih imenskih prostorov, samodejno izračuna kompenzacije v podatkovnih strukturah in dodajo oznake, ki se nanašajo na dobesedne vrednosti ali rezultat preprostih izračunov, ki jih opravi sestavljalec. Bližnjice lahko uporabite tudi za inicializiranje konstant in spremenljivk s premikajočimi se naslovi. Jeziki sestavljalcev, tako kot večina drugih računalniških jezikov, omogočajo dodajanje komentarjev izvorni kodi programa, ki bodo prezrti med postopkom gradnje. Pravni komentar je pomemben v jezikovnih programih sestavljavcev, saj je definiranje in dodelitev zaporedja binarnih ukazov stroj težko definirati. "Neupravljani" (brez komentarjev) asemblerjev jezik, ki ga ustvarijo prevajalniki ali disasemblerji, je težko prebrati, ko je potrebno narediti spremembe.