Codul mașinii ca limbaj de programare. Limbaj de asamblare
Limbajul de asamblare (sau asamblatorul) este un limbaj de programare de nivel scăzut pentru un computer sau alt hardware programabil, în care există o corelație între limbajul și instrucțiunile codului arhitecturii mașinii. Fiecare limbă orientată spre mașină (în terminologia profesională - "colector") se referă la o arhitectură specifică a calculatorului. În schimb, majoritatea limbajelor de programare la nivel înalt sunt cross-platform, dar necesită interpretare sau compilare.
conținut
Platforma orientată spre cod poate fi numită și o limbă simbolică sau un set de instrucțiuni care sunt executate direct de CPU-ul calculatorului. Fiecare program executat de procesor constă dintr-o serie de instrucțiuni. Codul mașinii este prin definiție cel mai scăzut nivel de programare vizibil pentru programator.
utilizarea
Multe operațiuni necesită unul sau mai mulți operanzi capabili să construiască o instrucțiune completă și mulți asamblori pot accepta expresii și constante de număr și registre și etichete ca operanzi. Acest lucru îl eliberează pe expert atunci când programați în limbajul codului mașinii de la calcule repetitive obositoare. În funcție de arhitectură, aceste elemente pot fi combinate și pentru instrucțiuni specifice sau moduri de adresare utilizând compensări sau alte date, precum și adrese fixe. Mulți "colectori" oferă mecanisme suplimentare pentru a facilita dezvoltarea programului, pentru a controla procesul de construire și pentru a sprijini depanarea.
Perspectiva istorică
Primul limbaj de asamblare a fost dezvoltat în 1947 de Kathleen Booth pentru ARC2 în Birkbeck Universitatea Londra din procesul de lucru cu Ioan von Neumann și Herman Goldstein la Institutul pentru Studii Avansate. SOAP (programul simbolic Optimal Assembly) a fost limba de asamblare pentru IBM PC 650, creat de Stan Pouley în 1955.
Din punct de vedere istoric, multe soluții software au fost scrise numai în asamblare. Sistemul de operare a fost scris exclusiv în această limbă înainte de introducerea Burroughs MCP (1961), care a fost scrisă în limba limbajului ESPOL. Multe aplicații comerciale au fost scrise într-un limbaj orientat către mașină, incluzând un număr mare de software-uri mainframe IBM, create de giganți IT. COBOL și FORTRAN au dispărut în cele din urmă majoritatea evoluțiilor, deși multe organizații mari au păstrat infrastructurile de aplicații bazate pe montaj în anii 1990.
Majoritatea microcomputerelor timpurii au fost bazate pe limbajul de asamblare cu codificare manuală, incluzând majoritatea aplicațiilor OS și pe scară largă. Acest lucru se datorează faptului că aceste mașini au avut restricții grave de resurse, au încărcat memoria individuală și arhitectura de afișare și au oferit servicii de sistem limitate cu erori. Poate că este mai importantă lipsa compilatoarelor de limbă de nivel înalt de primă clasă potrivite pentru utilizarea într-un microcomputer, ceea ce a făcut mai greu să înveți codul mașinii.
Domeniul de aplicare
Limbile de asamblare elimină majoritatea programelor problematice, obositoare și consumatoare de timp în asamblorii de prima generație, necesari pe cele mai vechi computere. Acest lucru eliberează programatorii de rutină sub forma memorării codurilor numerice și a adreselor de calcul. La etapele inițiale, "colectorii" au fost folosiți pe scară largă pentru toate tipurile de programare. Cu toate acestea, până la sfârșitul anilor `80. aplicația lor a fost în mare parte înlocuită de limbi de nivel superior în căutare de performanță îmbunătățită a programării. Astăzi, limba de asamblare este încă utilizată pentru manipularea directă a hardware-ului, accesul la instrucțiuni de procesor specializate sau pentru rezolvarea problemelor critice de performanță. Aplicațiile tipice sunt driverele dispozitivelor, sistemele integrate de nivel scăzut și parametrii în timp real.
Aplicații
Exemple tipice de programe de asamblare mari sunt sistemele de operare IBM PC DOS, compilatorul Turbo Pascal și aplicațiile timpurii, cum ar fi programul de calcul tabelar Lotus 1-2-3.
orientate spre mașină de limbă - limba de dezvoltare primar pentru multe căutate după computerele de acasă din anii 1980 și 1990 (cum ar fi MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga și Atari ST). Acest lucru se datorează faptului că dialogul BASIC interpretat pe aceste sisteme oferă o viteză redusă de execuție, precum și oportunități limitate de a utiliza în totalitate a echipamentelor existente. Unele sisteme au chiar și un mediu de dezvoltare integrat (IDE), cu mijloace foarte dezvoltate de depanare și macroscopice. Unele compilatoare sunt disponibile pentru Radio Shack TRS-80, și succesorii săi au reușit să combine ansamblul de putere încorporat, cu programe de nivel înalt. După compilarea de asamblare în linie a creat un built-in cod binar.
Codul mașinii pentru manechine. terminologie
Programul de asamblare creează coduri de operare prin traducerea combinațiilor mnemonice și a regulilor de sintaxă pentru operații și moduri de adresare în echivalentele lor numerice. Această reprezentare include în mod obișnuit un cod de operare, precum și alți biți și date de control. Assembler calculează de asemenea expresii constante și definește denumiri simbolice pentru locațiile de memorie și alte obiecte.
Codurile mașinilor comenzi de asamblare poate efectua și câteva tipuri simple de optimizare, în funcție de setul de comenzi. Unul dintre exemplele concrete ale acestui lucru poate fi popularul "colectori" x86 de la diferiți furnizori. Cele mai multe dintre ele pot efectua schimbări ale comenzilor de schimb în orice număr de treceri, la cerere. De asemenea, este capabil de a efectua o rearanjare simpla sau inserarea de instrucțiuni, cum ar fi unele colectoare arhitecturi RISC mașini, care pot contribui la optimizarea echipelor de planificare de sunet pentru a maximiza utilizarea conductei CPU.
Similar cu limbile de programare timpurie, cum ar fi Fortran, Algol, Cobol și Lisp, colectorii au fost disponibili încă din anii 1950, la fel ca și primele generații de interfețe de calculator bazate pe text. Cu toate acestea, colectorii au apărut în primul rând, deoarece sunt mult mai ușor de scris decât compilatorii pentru limbile de nivel înalt. Acest lucru se datorează faptului că fiecare modem mnemonic, precum și modurile de adresare și operanzii de instrucțiuni sunt traduse în reprezentări numerice ale fiecărei instrucțiuni particulare fără mult context sau analiză. Au existat, de asemenea, o serie de clase de traducători și generatori de coduri semi-automate cu proprietăți similare ambelor ansambluri și limbi de nivel înalt, iar codul de viteză poate fi unul dintre cele mai cunoscute exemple.
Numărul de treceri
Există două tipuri de programare a asamblorilor, bazate pe numărul de treceri prin sursă (prin numărul de încercări de citire) pentru a crea fișierul obiect.
Single-pass assemblers trec prin codul sursă o singură dată. Orice caracter utilizat înainte de a fi definit va necesita errata la sfârșitul codului obiect.
Ansamblurile multipass creează tabele cu toate caracterele și valorile lor în primele pasaje și apoi aplică tabelul în pasajele ulterioare pentru a genera codul.
Motivul principal pentru utilizarea vitezei ansamblului colector cu o singură trecere a fost - de multe ori necesită o a doua trecere și re-lectură înapoi o sursă de program pe bandă. calculatoare mai târziu, cu cantități mult mai mari de memorie (mai ales pentru discuri de stocare) au loc pentru a efectua toate prelucrare necesare, fără a re-lectură. Avantajul multi-pass de asamblare este faptul că absența erorilor conduce la faptul că procesul de legare (sau descărcați programul, în cazul în care asamblorul crea direct cod executabil) este mai rapid.
Ce este un cod binar?
Un program scris în limbaj de asamblare constă dintr-o serie de instrucțiuni mnemonice de procesor și meta-operatori (cunoscuți sub numele de directive, pseudo-instrucțiuni și pseudo-operații), comentarii și date. Instrucțiunile privind limba de asamblare constau, de obicei, din mnemonicul codului de operare. Este urmată de o listă de date, argumente sau parametri. Acestea sunt traduse de asamblare în instrucțiuni de limbaj mașină care sunt încărcate în memorie și executate.
De exemplu, următoarea declarație indică procesorului x86 / IA-32 să mute valoarea 8-biți în registru. Codul binar pentru această comandă este 10110, urmat de un identificator pe 3 biți pentru care este utilizat registrul. Identificatorul AL este 000, astfel încât următorul cod să încarce registrul AL cu datele 01100001.
Se ridică întrebarea: ce este un cod binar? Acesta este un sistem de codificare care utilizează cifre binare "0" și "1" pentru a reprezenta o literă, un număr sau un alt simbol pe un computer sau pe alt dispozitiv electronic.
Exemplu de cod mașină: 10110000 01100001.
Caracteristici tehnice
Convertirea unei limbi de asamblare în codul mașinii este o sarcină de asamblare. Procesul invers este realizat folosind un disassembler. Spre deosebire de limbile de nivel înalt, există o corespondență unu-la-unu între setul de operatori de asamblare simpli și instrucțiunile din limbajul mașinii. Cu toate acestea, în unele cazuri, asamblatorul poate furniza pseudo-instrucțiuni (macro-uri). Acestea se aplică la mai multe instrucțiuni lingvistice ale mașinii pentru a oferi funcționalități necesare în mod obișnuit Majoritatea asamblorilor cu funcții complete oferă, de asemenea, un limbaj bogat de macro-uri, care este folosit de furnizori și programatori pentru a genera mai multe coduri complexe și secvențe de date.
Fiecare arhitectură de calculator are propriul limbaj al mașinii. Calculatoarele se disting prin numărul și tipurile de operațiuni pe care le suportă, în diferite dimensiuni și număr de registre, precum și în reprezentările de date din depozit. În timp ce cele mai multe PC-uri de uz general pot efectua aproape aceeași funcționalitate, modurile în care fac acest lucru variază. Limbile de asamblare corespunzătoare reflectă aceste diferențe.
O mulțime de seturi de mnemonic sau sintaxă în asamblare pot exista pentru un set de comenzi, de obicei create în diferite programe. În aceste cazuri, cel mai popular este de obicei cel furnizat de producător și folosit în documentația sa.
Limba designului
Există un mare grad de diversitate în modul în care autorii colecționarilor clasifică aplicațiile și nomenclatorul pe care îl folosesc. În special, unii descriu tot ceea ce se deosebește de mașină sau de muniția extinsă, ca o pseudo-operație. Dicționarul de bază de asamblare constă dintr-un sistem de comandă - cele trei tipuri principale de instrucțiuni care sunt utilizate pentru a defini operațiile programului:
- mnemonicii opcodului;
- definiții de date;
- directivele colectorului.
Opcode mnemonic și mnemonice extinse
Instrucțiunile scrise în limba de asamblare sunt elementare, spre deosebire de limbile de nivel înalt. De regulă, mnemonica (simboluri arbitrare) este o denumire simbolică pentru o instrucțiune de cod executabil. Fiecare comandă constă, de obicei, dintr-un opcode plus zero sau mai mulți operanzi. Cele mai multe comenzi se referă la una sau două valori.
Mnemonicurile extinse sunt adesea folosite pentru funcționarea specializată a instrucțiunilor - în scopuri care nu sunt evidente din numele manualului. De exemplu, multe procesoare nu au o instrucțiune explicită NOP, dar au algoritmi construiți care sunt utilizați în acest scop.
Mulți constructori susțin macrocomenzi de bază încorporate care pot genera două sau mai multe instrucțiuni de mașină.
Directivele privind datele
Există instrucțiuni utilizate pentru a defini elemente pentru stocarea datelor și a variabilelor. Ele determină tipul de date, lungimea și alinierea. Aceste instrucțiuni pot determina, de asemenea, disponibilitatea informațiilor pentru programele externe (colectate separat) sau numai pentru programul în care este definită partiția de date. Unii asamblori le definesc ca pseudo-operatori.
Directivele privind asamblarea
Directivele colectorului, denumite și pseudocoduri sau pseudo-operații, sunt instrucțiuni furnizate asamblatorului și direcționează-l spre efectuarea altor operații decât instrucțiunile de asamblare. Directivele afectează activitatea de asamblare și pot afecta codul obiect, tabelul de simboluri, fișierul de listare și valorile parametrilor de asamblare intern. Uneori termenul pseudocode este rezervat directivelor care generează codul obiect.
Numele pseudo-operațiunilor încep adesea dintr-un punct pentru a diferi de instrucțiunile mașinii. O altă utilizare obișnuită a pseudo-operațiunilor este de a rezerva zone de depozitare pentru datele de rulare și, eventual, de a iniția conținutul lor la valori cunoscute.
Cod de auto-documentare
Ansamblurile simbolice permit programatorilor să asocieze nume arbitrare (etichete sau simboluri) cu celule de memorie și constante diferite. Adesea, fiecărei constante și variabile i se atribuie un nume propriu-zis, deci instrucțiunile se pot referi la aceste locații prin nume, contribuind astfel la codul de auto-documentare. În codul executabil, numele oricărei subrutine este legat de punctul de intrare, astfel încât orice apel la subrutină să poată utiliza numele său. În cadrul subrutinelor, sunt atribuite etichetele GOTO. Mulți constructori susțin caractere locale care sunt lexic diferite de caracterele obișnuite.
asamblorii de tip NASM asigura un management simbol flexibil, care permite programatorilor să gestioneze diferite spații de nume, calcula automat compensate în structurile de date și de a atribui etichete care se referă la valorile literale sau rezultatul calculelor simple, efectuate de asamblare. Etichetele pot fi, de asemenea, utilizate pentru a inițializa constantele și variabilele utilizând adresele de roaming.
Limbile de asamblare, la fel ca cele mai multe limbi de calculator, vă permit să adăugați comentarii la codul sursă al programului care va fi ignorat în timpul procesului de construire. Comunicarea judiciară este importantă în programele de limbaj de asamblare, deoarece este dificil să se determine și să se atribuie o secvență de instrucțiuni binare ale mașinii. Limbajul de asamblare "neschimbat" (fără a fi comentat), creat de compilatori sau dezasamblatoare, este dificil de citit atunci când este necesar să se facă schimbări.
- Ce este - compilatorul sau Cum de a face computerul să înțeleagă ce vrei de la el?
- Programarea orientată pe obiecte
- Programare structurată
- Limbaj de programare Java
- Limba de programare de bază și istoricul acesteia
- Lista limbajelor de programare. Limbi de programare de nivel scăzut și înalt
- Assembler - o comandă pentru începătorii programatorilor de nivel scăzut
- Ce este Ruby? Limba de programare "Ruby"
- Programare: limba de asamblare. Elementele de bază ale limbajului de asamblare
- Python pentru începători
- Cele mai populare limbi de programare. Limbaje de programare pentru începători
- Evaluarea limbajelor de programare 2016
- Ce este un compilator - descriere
- Istoria dezvoltării limbajelor de programare: pe scurt despre tot
- Limba de programare c (s)
- Compilarea este un proces care facilitează comunicarea între un programator și un calculator
- Construcția condiționată a. Python: vasta și simplitatea limbii
- Cel mai ușor limbaj de programare pentru începători
- Cum se scrie un program în Notepad
- Ce este sistemul de programare
- Clasificarea limbajelor de programare după niveluri