Kód stroja ako programovací jazyk. Assembler jazyk

Montážny jazyk (alebo assembler) je nízkoúrovňový programovací jazyk pre počítač alebo iný programovateľný hardvér, v ktorom existuje korelácia medzi architektúrou inštrukcií jazyka a strojového kódu. Každý strojovo orientovaný jazyk (v profesionálnej terminológii - "kolektor") sa vzťahuje na špecifickú počítačovú architektúru. Naopak, väčšina programovacích jazykov na vysokej úrovni je naprieč platformou, ale vyžaduje interpretáciu alebo kompiláciu. Kód orientovaný na platformu môže byť tiež nazývaný ako symbolický jazyk alebo sada inštrukcií vykonávaných priamo centrálnym procesorom počítača. Každý program vykonaný procesorom pozostáva zo série pokynov. Kód stroja je podľa definície najnižšia úroveň programovania viditeľná pre programátora.




Použitie

Pre mnoho transakcií je potrebné jeden alebo viac operandov môže stavať plné inštrukcie, a mnoho assemblerы môže mať výrazy čísel a konštanty a registrov a štítkov operandy. Toto oslobodzuje odborníka pri programovaní v jazyku kódu stroja z únavných opakovaných výpočtov. V závislosti od architektúry je možné tieto prvky kombinovať aj pre špecifické pokyny alebo režimy adresovania pomocou posunov alebo iných údajov, ako aj pevných adries. Mnoho "zberateľov" ponúka ďalšie mechanizmy na uľahčenie vývoja programu, riadenie procesu vytvárania a udržiavania ladenia.


Historical Perspective

Prvý assembleru bol vyvinutý v roku 1947 na Kathleen Booth PCO2 Byrkbekskom na University of London v práci John von Neumann a Hermann Holdstynom Institute for Advanced Studies. SOAP (Symbolic Optimal zhromaždenia Program) bol jazyk symbolických inštrukcií pre počítač IBM 650 generované Stэnom pólu v roku 1955. Historicky bolo v assembleri napísané množstvo softvérových riešení. OS celkom napísané v tomto jazyku Pred zavedením Burroughs MCP (1961), ktorý bol napísaný v Executive Systems Problém Oriented Language (ESPOLA). Mnoho komerčných aplikácií bolo napísaných v strojovo-orientovanom jazyku, vrátane veľkého množstva softvéru sálových počítačov IBM, ktorý vytvorili IT giganti. COBOL a FORTRAN nakoniec nahradené vo väčšine vývoja, aj keď mnoho veľkých organizácií udržal montážnych aplikácií infraštruktúry v roku 1990.
Väčšina skorých mikropočítačov bola založená na manuálnom jazyku zostavovania kódovania, vrátane väčšiny OS a veľkých aplikácií. To je spôsobené tým, že tieto stroje mali vážne obmedzenia zdrojov, načítavali individuálnu pamäť a architektúru zobrazenia a poskytovali obmedzené systémové služby s chybami. Snáď ešte dôležitejšie bol nedostatok prvotriednych jazykových prekladačov na vysokej úrovni, vhodné pre použitie mikropočítače, čo sťažuje učenie strojový kód.

Použitie

Jazyky montáž eliminuje veľkú časť problému, dlhý a namáhavý programovanie v assembleri prvej generácie potrebná pre prvých počítačov. To je všetkouvoľňuje programátorov z rutiny vo forme zapamätania číselných kódov a výpočtových adries. V úvodných fázach boli zberatelia široko používaní pre všetky typy programovania. Do konca osemdesiatych rokov 20. storočia však ich použitie bolo do značnej miery nahradené jazykmi vyššej úrovne pri hľadaní zvýšenej produktivity. Dnes sa assemblerový jazyk používa na priamu manipuláciu s hardvérom, prístup k špecializovaným inštrukciám procesora alebo riešenie kritických problémov s výkonom. Typickými aplikáciami sú ovládače zariadení, nízkoúrovňové vstavané systémy a nastavenia v reálnom čase.

Príklad použitia

Typické príklady veľkých programov v jazyku symbolických inštrukcií je operačný systém PC-DOS, Turbo Pascal kompilátor a skoré aplikácie, napríklad tabuľkového procesora Lotus 1-2-3.
stroj orientovaný jazyk - rozvoj primárny jazyk pre mnoho populárnych domáci počítač z 1980 a 1990 (ako MSX, Sinclair ZX spektrum, Commodore 64 Commodore Amiga a Atari ST). Je to spôsobené tým, že interpretované dialógy BASIC o týchto systémoch poskytovali nízku rýchlosť vykonávania, ako aj obmedzené možnosti plného využitia existujúcich zariadení. Niektoré systémy dokonca majú integrované vývojové prostredie (IDE) s vysoko vyvinutými nástrojmi na ladenie a makro objekty. Niektoré funkcie dostupné pre Radio Shack TRS-80 a jeho právnym nástupcom kompilátory boli schopní kombinovať programy zberu vložené zdroje vysoká. Po kompilácii vytvoril vstavaný assembler vstavaný binárny kód.

Strojový kód pre figuríny. Terminológia

assembler generuje opcodes prenášaním klávesnice mnemotechnická pomôcky a syntax pre operácie a adresovanie režimy v ich číselné ekvivalenty. Táto prezentácia zvyčajne obsahuje operačný kód a ďalšie kúsky a riadiacich dát. Assembler a vypočítava regulárne výrazy a určuje symbolická mená pre umiestnenie pamäte a ďalších zariadení.
strojového kódu assembleri príkazy môžu tiež vykonávať niektoré bežné typy optimalizácie závisí na sadu príkazov. Jeden špecifický príklad tohto môže byť populárny "zberatelia» x86 od rôznych dodávateľov. Väčšina z nich môže vykonávať náhradné postúpi v ľubovoľnom počte priechodov, na vyžiadanie. tiež schopný vykonávať jednoduché preskupenie alebo vloženie inštrukcie, napríklad niektoré zberateľov architektúra RISC, ktoré môžu prispieť k optimalizácii zvuku plánovacie tímy využívať dopravníkový CPU. Rovnako ako prvý programovacie jazyky, ako Fortran, Algol, COBOL a Lisp, kolektory sú k dispozícii od roku 1950 ako prvá generácia počítačovej rozhranie textu. Avšak, spočiatku tam bolo kolektory, pretože sú oveľa jednoduchšie písať než kompilátory pre jazyky na vysokej úrovni. To je spôsobené tým, že každý symbolických inštrukcií a operandov adresovanie módy a inštrukcie preložené do početné zastúpenie jednotlivých inštrukcií bez väčších súvislostiach alebo analýzy. Tam bola séria tried a polotovarov prekladateľa kód generátor s vlastnosťami podobnými ako zostavy aako napríklad vysoká úroveň a vysokorýchlostný kód, je možno jedným z najznámejších príkladov.

Počet prechodov

Na základe počtu prechodov cez zdroj (počtom pokusov o čítanie) existujú dva typy programovania zostavovacieho programu na vytvorenie súboru objektov.
Jeden-pass assemblers prechádzajú zdrojovým kódom raz. Akýkoľvek znak použitý na jeho definovanie bude vyžadovať chybu na konci objektového kódu.
Multipass assemblers vytvárajú tabuľky so všetkými znakmi a ich hodnotami v prvých pasážach a potom použijú tabuľku v nasledujúcich pasážach na vygenerovanie kódu. Počiatočným dôvodom použitia jednosmerných zberateľov bola rýchlosť zberu - často sa vyžadovalo druhé prechodové prevíjanie a opätovné čítanie zdroja programu na páske. Neskôr počítače s veľkým množstvom pamäte (najmä pre ukladanie diskov) mali priestor na vykonanie všetkého potrebného spracovania bez opätovného čítania. Mnohoprohodnoho montáž výhodou je, že neprítomnosť chýb vedie k procesu väzby (alebo sťahovať programy priamo v prípade, že assembler generuje spustiteľný kód) je možná.

Čo je binárny kód?

Tento program je napísaný v assembleri sa skladá z radu trojpísmenovej príkazového procesora a meta-operátorov (známy ako smerníc, pokynov a pseudo-psevdooperatsyy), komentárov a dát. Pokyny pre montážny jazyk zvyčajne pozostávajú z operácie mnemonického kódu. Nasleduje zoznam údajov, argumentov alebo parametrov. Sú tosú prekladané assemblerom v inštrukciách jazyka stroja, ktoré sú načítané do pamäte a vykonané. Napríklad nasledujúci pokyn informuje procesor x86 /IA-32, aby presunul 8-bitovú hodnotu do registra. Binárny kód pre tento príkaz je 10110, za ktorým nasleduje 3-bitový identifikátor, pre ktorý sa register používa. Identifikátor AL je 000, takže nasledujúci kód načíta AL register s údajmi 01100001. Vzniká otázka: čo je binárny kód? Jedná sa o kódovací systém používajúci binárne číslice "0" a "1" na reprezentovanie písmena, čísla alebo iného znaku na počítači alebo inom elektronickom zariadení. Príklad strojového kódu: 1011000001100001.

Technické vlastnosti

Konverzia jazyka montáže na kód stroja je úloha montáže zostavy. Reverzný proces sa vykonáva pomocou disassemblera. Na rozdiel od jazykov vyššej úrovne existuje korešpondencia medzi viacerými jednoduchými operátormi zostáv a inštrukciami jazyka. Avšak v niektorých prípadoch môže assembler poskytnúť pseudoinštrukcie (makrá). Vzťahujú sa na niekoľko pokynov jazyka, ktoré poskytujú všeobecne potrebné funkcie. Väčšina plnohodnotných montérov poskytuje aj bohatý makro obsah, ktorý používajú dodávatelia a programátori na generovanie zložitejších kódov a dátových sekvencií.
Každá architektúra počítača má vlastný jazyk počítača. Počítače sa líšia v počte a druhoch operácií, ktoré podporujú, v rôznych veľkostiach a počte registrov, ako aj pri prezentácii údajov v úložisku. V tomväčšina univerzálneho počítače schopné vykonávať prakticky rovnakú funkciu spôsoby, ktoré sa líšia. Zodpovedajúce jazyky assemblerov odrážajú tieto rozdiely. Mnoho sád mnemotechnická pomôcky alebo syntaxe jazyka zostavy môže pre jednu sadu príkazov, zvyčajne vytvorené v rôznych aplikáciách existovať. V týchto prípadoch je najpopulárnejšia je zvyčajne ten, poskytovanej výrobcom a používaný v jeho dokumentácii.

dizajnový jazyk

Tam je veľký stupeň rozmanitosti, ako autori kolektory klasifikovať aplikácií a názvoslovie, ktoré používajú. Najmä niektoré opísať tak odlišné od stroja alebo predĺžených mnemotechniky ako psevdooperatsyyu. Základná slovná zásoba sa skladá z kolekcie príkazov - tri hlavné typy inštrukcií sú používané na definovanie operácií programu:
  • opkoda mnemotechnická pomôcky;
  • určovanie údajov;
  • Príručka pre zberateľov.
  • opkoda mnemotechnická pomôcky a rozšírené mnemotechnická pomôcky

    inštrukcie napísané v jazyku symbolických inštrukcií, základným, na rozdiel od jazykov na vysokej úrovni. Typicky sú mnemotechnické (náhodné symboly) symbolom jedného spustiteľného kódu. Každý tím sa zvyčajne skladá z OPCODE navyše nula alebo viac operandov. Väčšina príkazov sa týka jednej alebo dvoch hodnôt. Rozšírené mnemotechnická pomôcky sa často využíva na špecializované návodu na účely, ktoré nie sú zrejmé z názvu manuál je. Napríklad, mnoho procesory majú explicitné inštrukcie NOP, ale majúvložené algoritmy, ktoré sa používajú na tento účel.
    Mnoho kolektorov podporuje základné vstavané makrá, ktoré môžu generovať dva alebo viac strojových pokynov.

    Smernice o údajoch

    Na identifikáciu prvkov na ukladanie údajov a premenných sa používajú pokyny. Určujú typ údajov, dĺžku a zarovnanie. Tieto pokyny môžu určiť dostupnosť informácií pre externé programy (zhromažďované samostatne) alebo len pre aplikáciu, ktorá má definovanú sekciu údajov. Niektorí montéri ich definujú ako pseudo-operátory.

    Smernice o montáži

    Pravidlá montáže, tiež nazývané pseudokódy alebo pseudo-operácie, sú príkazy, ktoré poskytuje montér, a nasmerujú ho na iné činnosti ako montážne pokyny. Smernice ovplyvňujú prácu montéra a môžu ovplyvniť kód objektu, tabuľku symbolov, zoznam súborov a hodnotu parametrov interného assemblera. Niekedy termín pseudokód je vyhradený pre smernice, ktoré generujú objektový kód. Názvy pseudooperácií sa často začínajú v určitom bode odlišné od strojových príkazov. Ďalším bežným používaním pseudooperácií je rezervácia priestorov na ukladanie dát za behu a prípadne inicializáciu ich obsahu na známe hodnoty.

    Samodokumentyruyuschyysya Kód

    Znak assemblerы umožňujú programátorom pripojenie ľubovoľných mien (štítky alebo symboly) s pamäťových buniek a rôzne konštanty. Často sa každej konštantnej premennej a premennej priraďuje jej vlastné meno,takže pokyny sa môžu týkať týchto umiestnení menom, čím sa uľahčí autodokumentácia kódu. V spustiteľnom kóde meno ktoréhokoľvek podprogramu zodpovedá jeho vstupnému bodu, takže akékoľvek podprogramové volania môžu používať jeho názov. V rámci podprogramov sú priradené značky GOTO. Mnoho kolektorov podporuje lokálne znaky, ktoré sú lexikálne odlišné od bežných znakov. Assemblerы typ NASM poskytuje flexibilné riadiace znaky, umožňuje programátorom riadiť rôzne priestory mien automaticky vypočítať posun v dátových štruktúr a priradiť štítky, ktoré odkazujú na lyteralnыe hodnotu alebo výsledok jednoduchých výpočtov vykonaných zostave. Klávesové skratky možno použiť aj na inicializáciu konštánt a premenných s presunutými adresami. Asembler jazyky, ako väčšina ostatných počítačových jazykov, vám umožňujú pridať komentáre k zdrojovému kódu programu, ktoré budú počas procesu vytvárania ignorované. Súdny komentár je dôležitý v programoch jazykov assemblerov, pretože definícia a priradenie sekvencie príkazov binárnych strojov je ťažké definovať. "Hrubý" (no comment) assembleri, kompilátora alebo vytvorené disassembler, je ťažké čítať, keď je potreba vykonať zmeny.

    Súvisiace publikácie