Asamblator de limbaje de programare de nivel scăzut. Când a fost creat ansamblul și limbajul mașinii? Identificatori, numere întregi, simboluri, comentarii, echivalență

Limbaj de programare

Assembler este un limbaj de programare de nivel scăzut, care este un format lizibil de om pentru scrierea instrucțiunilor mașinii.

Instrucțiunile de limbaj de asamblare corespund unu la unu cu instrucțiunile procesorului și, de fapt, reprezintă o notație simbolică convenabilă (cod mnemonic) a comenzilor și a argumentelor acestora. De asemenea, limbajul de asamblare oferă abstracții software de bază: conectarea părților programului și a datelor prin etichete cu nume simbolice și directive.

Directivele de asamblare vă permit să includeți blocuri de date (descrise în mod explicit sau citite dintr-un fișier) în program; repetați un anumit fragment de un număr specificat de ori; compilați un fragment condiționat; setați adresa de execuție a fragmentului, modificați valorile etichetelor în timpul procesului de compilare; utilizați macrocomenzi cu parametri etc.

Fiecare model de procesor are, în principiu, propriul set de instrucțiuni și limbajul de asamblare (sau dialectul) corespunzător.

Avantaje și dezavantaje

  • cantitatea minimă de cod redundant (folosind mai puține instrucțiuni și acces la memorie). Ca rezultat - viteză mai mare și dimensiuni mai mici ale programului
  • cantități mari de cod, un număr mare de sarcini mici suplimentare
  • lizibilitate redusă a codului, dificultăți de întreținere (depanare, adăugare de caracteristici)
  • dificultatea implementării paradigmelor de programare și orice alte convenții oarecum complexe, dificultatea dezvoltării comune
  • mai puține biblioteci disponibile, compatibilitatea lor scăzută
  • acces direct la hardware: porturi I / O, registre speciale ale procesorului
  • capacitatea de a scrie cod auto-modificat (adică metaprogramarea și fără a fi nevoie de un interpret software)
  • „potrivire” maximă pentru platforma potrivită(utilizarea instrucțiunilor speciale, caracteristicile tehnice ale „hardware-ului”)
  • intoleranță la alte platforme (cu excepția compatibilității binare).

Sintaxă

Nu există un standard general acceptat pentru sintaxa limbajelor de asamblare. Cu toate acestea, există standarde de facto - abordările tradiționale pe care le adoptă majoritatea dezvoltatorilor de limbaje de asamblare. Principalele astfel de standarde sunt sintaxa Intel și sintaxa AT&T.

Formatul general pentru scrierea instrucțiunilor este același pentru ambele standarde:

`[etichetă:] opcode [operanzi] [; comentariu]`

Opcode-ul este direct mnemonica instrucțiunii către procesor. Se pot adăuga prefixuri (repetări, schimbarea tipului de adresare etc.). Operanzii pot fi constante, nume de registre, adrese în RAM etc. Diferențele dintre standardele Intel și AT&T se referă în principal la ordinea enumerării operanzilor și la sintaxa acestora pentru diferite metode de adresare.

Mnemonica utilizată este de obicei aceeași pentru toate procesoarele din aceeași arhitectură sau familie de arhitecturi (printre cele cunoscute sunt mnemonica procesorilor și controlerelor Motorola, ARM, x86). Acestea sunt descrise în specificațiile procesorului.

De exemplu, procesorul Zilog Z80 a moștenit setul de instrucțiuni Intel i8080, l-a extins și a schimbat mnemonica (și denumirile de înregistrare) în felul său. De exemplu, am schimbat mișcarea Intel în ld. Procesoarele Motorola Fireball au moștenit setul de instrucțiuni Z80, reducându-l ușor. În același timp, Motorola a revenit oficial la mnemonica Intel. si in acest moment jumătate din asamblatorii Fireball funcționează cu mnemonici Intel, iar jumătate cu mnemonici Zilog.

Directivele

În plus față de instrucțiuni, un program poate conține directive: instrucțiuni care nu se traduc direct în instrucțiuni ale mașinii, ci controlează funcționarea compilatorului. Setul și sintaxa lor variază semnificativ și nu depind de platforma hardware, ci de compilatorul utilizat (dând naștere dialectelor limbilor din aceeași familie de arhitecturi). Ca set de directive, se pot selecta:

  • definirea datelor (constante și variabile)
  • gestionarea organizării programului în memorie și a parametrilor fișierului de ieșire
  • setarea modului de compilare
  • tot felul de abstracții (adică elemente ale limbajelor la nivel înalt) - de la proiectarea de proceduri și funcții (pentru a simplifica implementarea paradigmei de programare procedurală) la construcții și bucle condiționate (pentru paradigma de programare structurată)
  • macro-uri

Originea și critica termenului „limbaj asamblator”

Acest tip de limbi și-a primit numele de la numele traducătorului (compilatorului) din aceste limbi - assembler (assembler englez). Numele acestuia din urmă se datorează faptului că pe primele computere nu existau limbaje de nivel superior, iar singura alternativă la crearea de programe utilizând asamblorul era programarea directă în coduri.

Limba de asamblare în rusă este adesea numită „asamblator” (și ceva legat de acesta - „asamblator”), care, conform traducerii în engleză a cuvântului, este greșită, dar se încadrează în regulile limbii ruse. Totuși, asamblorul (programul) în sine este numit și simplu „asamblator”, nu „compilator de limbaj de asamblare” etc.

Utilizarea termenului „limbaj de asamblare” poate duce, de asemenea, la concepția greșită că există un singur limbaj de nivel scăzut sau cel puțin un standard pentru astfel de limbi. Atunci când numiți limba în care este scris un anumit program, este recomandabil să specificați pentru ce arhitectură este destinat și în ce dialect al limbii este scris.

Elemente de sintaxă:

Exemple:

Salut Lume !:

Exemplu pentru versiunile Intel x86 (IA32)

mov ax, cs mov ds, ax mov ah, 9 mov dx, offset Hello int 21h xor ax, ax int 21h Hello: db "Hello World!", 13, 10, "$"

Salut Lume !:

Exemplu pentru versiunile Amiga

mutare. Mutare #DOS. l 4.w, a6 jsr - $ 0198 (a6); OldOpenLibrary mutare. l d0, a6 beq. s. Mutați afară. l #HelloWorld, d1 A) moveq # 13, d2 jsr - $ 03AE (a6); WriteChars B) jsr - $ 03B4; Mutați PutStr. l a6, a1 mișcare. l 4.w, a6 jsr - $ 019E (a6); Închideți biblioteca. Out rts DOS dc. b "dos.library", 0 HelloWorld dc. b "Bună ziua lumii!" , $ A, 0

Salut Lume !:

Exemplu pentru versiunile AtariST

mutare. l #helloworld, - (A7) mișcare # 9, - (A7) trap # 1 addq. l # 6, A7 mișcare # 0, - (A7) capcana # 1 helloworld: dc. b „Bună ziua lumii!”, $ 0d, $ 0a, 0

Salut Lume !:

Exemplu pentru versiunile Intel x86 (IA32)

NASM Linux, folosește sintaxa Intel. Compilare și conectare:

  • nasm –f elf –o salut.o salut.asm
  • ld -o buna buna buna.o

SECȚIUNE. date msg db "Hello, world!", 0xa len equ $ - msg SECTION. text global _start _start :; Punct de intrare program mov eax, 4; apel de sistem "write" mov ebx, 1 mov ecx, msg; Pointer către date mov edx, len; Cantitatea de date int 0x80; Kernel call mov eax, 1; "_exit" apel apel sistem mov ebx, 0; Returnează 0 (totul este bine) int 0x80; Invocarea nucleului

Salut Lume !:

Exemplu pentru versiunile PDP-8

/ - comentarii.

/ Hello World in assembler pentru DEC PDP - 8 * 200 salut, cla cll tls / tls setează steagul de imprimare. tad charac / creează un registru index dca ir1 / pentru a obține caractere tad m6 / setează un contor pentru numărul de dca / caractere de intrare. în continuare, tad i ir1 / get character. tip jms / tipul său. isz count / do else? jmp următor / nu, introduceți un alt caracter hlt tip, 0 / subrutină tip tsf jmp. - 1 tls cla jmp i type charac ,. / este folosit ca valoare inițială pentru ir1. 310 / H 305 / E 314 / L 314 / L 317 / O 254 /, 240/327 / W 317 / O 322 / R 314 / L 304 / D 241 /! m6, - 15 numărare, 0 ir1 = 10 $

Salut Lume !:

Exemplu pentru versiunile PDP-11

Programul este scris în ansamblorul de macrocomenzi MACRO-11 Pentru a compila și rula acest program în OS RT-11, utilizați comanda:

MACRO BUNA

ERORI DETECTATE: 0

LINK BUNĂ - Link. RUN BUNA - Fugi

TITLUL BUNA LUME; Nume . MCALL. TTYOUT ,. EXIT HELLO :: MOV #MSG, R1; Adresa de pornire a liniei 1 $: MOVB (R1) +, R0; Obținem următorul personaj BEQ DONE; Dacă este zero, ieșiți din buclă. TTYOUT; În caz contrar, imprimăm simbolul BR 1 $; Repetați bucla GĂSIT :. EXIT MSG :. ASCIZ / Bună ziua, lume! /; Șirul Bună ziua, lume! ... SFÂRȘIT BUNĂ; Sfârșitul programului HELLO

Salut Lume !:

Exemplu pentru versiunile System / 360, System / 370

IBM System / 360/370/390 Limba de asamblare de bază.

// EXEC ASSEMBLY START PRINCIPAL BALR 2, 0 UTILIZARE *, 2 OPEN PRINT MVC BUF, HW PUT PRINT CLOSE PRINT EOJ HW DC CL132 "HELLO WORLD" BUF DS CL132 PRINT DTFPR IOAREA1 = BUF, DEVADDR = SYSLST, BLKSIZE = 132, * DISPOZITIV = 3203, CONTROL = YES, PRINTOV = YES END MAIN / * // EXEC LNKEDT // EXEC / * / &

Salut Lume !:

Exemplu pentru versiunile Apple II

* BUNA LUME PENTRU MERE 6502] [* ******************************** STROUT EQU $ DB3A LDY #> BUNA LDA #< HELLO JMP STROUT HELLO ASC "HELLO WORLD !", 00

Salut Lume !:

Exemplu pentru versiunile PDP-10

CHTTYO - Toate I / O se fac folosind canale I / O. Cel mai bine este să creați nume simbolice pentru canalele pe care le utilizați și să le începeți cu CH. Definiți aceste nume folosind operatorul MIDAS ==.

CALL este o notație simbolică pentru invocarea unui apel de sistem. Formatul său este .CALL.

OPEN deschide un canal I / O pentru utilizare. Necesită doi parametri - numărul canalului și numele dispozitivului în SIXBIT.

LOSE% LSFIL este un apel de sistem care tipărește un mesaj de eroare I / O dacă se întâmplă.

IOT este un apel de sistem care se ocupă de fapt cu I / O. Ca parametru, trebuie să specificați canalul și adresa care conține codul de caractere pentru ieșire. De exemplu, „H reprezintă H.

TITLUL PRINTHELLO A = 1 CHTTYO == 1; Canal pentru ieșire. START:; Deschiderea unui canal TTY. ... APELĂ [SETZ? SIXBIT / OPEN / [. UAO, CHTTYO]? [SIXBIT / TTY /] ((SETZ))]. LOSE% LSFIL. IOT CHTTYO, ["H]; Imprimați HELLO WORLD caracter cu caracter .. IOT CHTTYO, [" E]. IOT CHTTYO, ["L]. IOT CHTTYO, [" L]. IOT CHTTYO, ["O]. IOT CHTTYO, [^ M]; caracter Newline. IOT CHTTYO, [" W]. IOT CHTTYO, ["O]. IOT CHTTYO, [" R]. IOT CHTTYO, ["L]. IOT CHTTYO, [" D]. VALOARE; Program, oprește :) ÎNCHEI ÎNCEPUT

Numere Fibonacci:

Exemplu pentru versiunile MIPS32

Emulatorul MARS. Ieșire consolă MARS:

Numerele Fibonacci sunt: ​​1 1 2 3 5 8 13 21 34 55 89 144 - programul este terminat -

Programul afișează 15 numere Fibonacci. Numărul de numere poate fi modificat în secțiunea .data.

Spațiu de date: .asciiz "" cap: .asciiz "Numerele Fibonacci sunt: ​​\ n" fib: .word 0: 15 size: .word 15 .text principal: la $ t0, fib la $ t5, size lw $ t5, 0 ($ t5) li $ t2, 1 add.d $ f0, $ f2, $ f4 sw $ t2, 0 ($ t0) sw $ t2, 4 ($ t0) addi $ t1, $ t5, - 2 loop: lw $ t3, 0 ($ t0) lw $ t4, 4 ($ t0) add $ t2, $ t3, $ t4 sw $ t2, 8 ($ t0) addi $ t0, $ t0, 4 addi $ t1, $ t1, - 1 bgtz $ t1, loop la $ a0, fib move $ a1, $ t5 jal print li $ v0, 10 syscall print: add $ t0, $ zero, $ a0 add $ t1, $ zero, $ a1 la $ a0, head li $ v0, 4 syscall out: lw $ a0, 0 ($ t0) li $ v0, 1 syscall la $ a0, space li $ v0, 4 syscall addi li $ v0, 1 la $ a0, ($ t2) syscall la $ a0, string1 li $ v0, 4 syscall mult $ t1, $ t2 mflo $ t1 li $ v0, 1 la $ a0, ($ t1) syscall la $ a0, string2 li $ v0, 4 syscall addiu $ t2, $ t2, 1 beq $ t2, 16, endloop j loop endloop: li $ v0, 10 syscall



Asamblator

Asamblator Este un limbaj de programare de nivel scăzut. Limba și-a primit numele din cuvântul asamblator - asamblator. A apărut în anii '50. ca un analog simbolic al limbajului mașinii.
Instrucțiunile de asamblare corespund unu la unu cu instrucțiunile procesorului și, de fapt, reprezintă o formă simbolică convenabilă de scriere a comenzilor și argumentelor. De asemenea, ansamblul asigură conectarea părților programului și a datelor prin etichete, efectuate în timpul asamblării (pentru fiecare etichetă, se calculează o adresă, după care fiecare apariție a etichetei este înlocuită cu această adresă).
Deoarece seturile de instrucțiuni ale microprocesorului diferă, fiecare procesor are propriul set de instrucțiuni în limbajul de asamblare.
Cu ajutorul asamblorului, puteți scrie programe care sunt imposibile sau foarte greu de scris în alte limbaje de programare. De exemplu: generatoare de chei (keygen), monitoare de sistem, drivere hardware sau chiar OS.
Limbajele de nivel înalt („C”, „Pascal”, „Delphi” etc.) nu oferă un control fiabil asupra fluxurilor de date, adreselor de memorie sau registrelor procesorului și toate au fost dezvoltate pentru un anumit tip de sistem de operare, în timp ce asamblorul poate deveni același asamblator, dar lucrează pe o platformă necunoscută științei și realizează programe pentru aceeași platformă.
Programele de asamblare, spre deosebire de programele scrise în limbaje de nivel înalt, sunt de zece ori mai mici și funcționează de zece ori mai repede. Un exemplu este sistemul de operare MenuetOS, care este scris în Flat Assembler și se potrivește pe o dischetă (1,44 MB), iar setul include programe de aplicații, cum ar fi: un editor de cod de asamblare cu iluminare de fundal, lucrul cu sistemul de fișiere, screensaver 3D, o serie de jocuri, vizualizator de imagini, compilator Flat Assembler, terminal, CD player și multe altele. Avantajul este că poate fi descărcat rapid de pe Internet (chiar și cu o viteză redusă a conexiunii).
În acest moment, majoritatea specialiștilor în software se dezvoltă în limbaje de nivel înalt, cum ar fi Pascal sau C, care este mai ușor de scris programe, dar cel mai puternic și eficient. software este scris integral sau parțial în limbajul asamblării.

Literatură
1. Peter Abel - Asamblator. Limbaj și programare pentru IBM PC - M., 1999.

Asamblator

Asamblator(din engleză assembler - assembler) - un compilator al codului sursă al unui program scris într-un limbaj de asamblare într-un program într-un limbaj mașină.
La fel ca limbajul în sine, asamblatoarele sunt de obicei specifice unei anumite arhitecturi, sisteme de operare și variante ale sintaxei limbajului. În același timp, există ansambluri multi-platformă sau complet universale (mai precis, limitate-universale, deoarece este imposibil să scrieți programe independente de hardware într-un limbaj de nivel scăzut), care pot funcționa pe diferite platforme și sisteme de operare. Dintre acestea din urmă, se poate distinge și un grup de ansambluri încrucișate capabile să asambleze codul mașinii și modulele executabile (fișiere) pentru alte arhitecturi și sisteme de operare.
Asamblarea poate să nu fie prima și nu ultima etapă pe calea obținerii unui modul de program executabil. Deci, mulți compilatori din limbaje de programare la nivel înalt produc rezultatul sub forma unui program de limbaj de asamblare, care este procesat în continuare de asamblare. De asemenea, rezultatul asamblării nu poate fi un executabil, ci un modul obiect care conține blocuri împrăștiate de cod de mașină și date de program, din care (sau din mai multe module obiect) poate fi obținut un fișier executabil ulterior folosind linkerul.
Celule de memorie speciale situate direct în procesor. Lucrul cu registre este mult mai rapid decât lucrul cu celulele de memorie, astfel încât registrele sunt utilizate în mod activ atât în ​​programele de limbaj de asamblare, cât și în compilatoarele de limbaj la nivel înalt.
Numele registrelor provin din scopul lor:

EAX / AX / AH / AL (registru acumulator) - acumulator;
EBX / BX / BH / BL (registru de bază) - registru de bază;
ECX / CX / CH / CL (contor registru) - contor;
EDX / DX / DH / DL (registru de date) - registru de date;
ESI / SI (sursă index index) - sursă index;
EDI / DI (registru index destinație) - index receptor (receptor);
ESP / SP (registru pointer stivă) - registru pointer stivă;
EBP / BP (registrul indicatorului de bază) - registrul indicatorului de bază al cadrului stivei.

Comenzi de procesare șir
Pentru a lucra cu șiruri sau șiruri de caractere sau numere (adică, pur și simplu vorbind, cu matrice de date arbitrare), MP oferă o serie de comenzi speciale:
movs - transferul unui șir;
cmps - compararea a două linii;
seas - căutați într-un șir un element dat;
lods - încărcarea acumulatorului (registre AL sau AX) dintr-un șir;
stos - scrierea unui element șir din acumulator (înregistrează AX sau AL).

Demnitate

· Limbajul de asamblare vă permite să scrieți cel mai rapid și mai compact cod posibil pentru un procesor dat.
· Viteza de lucru - datorită optimizării algoritmului de calcul și / sau accesului mai rațional la RAM (de exemplu, dacă toate datele inițiale sunt stocate în registrele procesorului, atunci apelurile inutile către OP pot fi excluse), redistribuirea datelor , calculul tabelului funcțiilor;
Cantitatea de cod (inclusiv datorită utilizării eficiente a rezultate intermediare). Reducerea cantității de cod va accelera deseori execuția programului.
· Asigurarea utilizării maxime a capabilităților specifice unei anumite platforme, care vă permite, de asemenea, să creați programe mai eficiente, inclusiv mai puțin consumatoare de resurse.
· Când se programează în limbaj de asamblare, este posibil accesul direct la hardware și, în special, porturile I / O, registrele procesorului etc. În multe sisteme de operare, accesul direct din programele de aplicații pentru a scrie în registre echipament periferic blocat pentru fiabilitatea sistemului și pentru a evita „blocările”.
Limbajul de asamblare este adesea folosit pentru a crea drivere hardware și nucleul sistemului de operare atunci când sincronizarea este importantă dispozitiv periferic cu unități centrale de procesare.
· Limbajul de asamblare este utilizat pentru a crea „firmware” BIOS.
· Limbajul de asamblare este adesea folosit pentru a crea rutine de compilare dependente de mașină și interpreti de limbaj la nivel înalt și pentru a implementa compatibilitatea platformei.
· Cu ajutorul unui program de dezasamblare, se pot înțelege algoritmii programului investigat în absența unei listări într-un limbaj la nivel înalt, studiind doar codurile mașinii, dar în programele complexe non-banale, acest lucru necesită foarte mult timp .

dezavantaje
· Datorită orientării mașinii (nivel "scăzut") a limbajului de asamblare, este mai dificil pentru o persoană să citească și să înțeleagă un program din acesta în comparație cu limbajele de programare de nivel înalt; programul constă din elemente prea „mici” - instrucțiuni ale mașinii; în consecință, programarea și depanarea devin mai complicate, intensitatea forței de muncă și probabilitatea introducerii erorilor cresc.
· Abilitățile avansate de programare sunt necesare pentru a produce cod de calitate: codul scris de un programator mediu în limbajul de asamblare nu este de obicei mai bun sau mai rău decât codul generat de un compilator de optimizare pentru programe comparabile scrise într-un limbaj de nivel înalt.
· Un program într-un limbaj de nivel înalt poate fi recompilat cu optimizare automată pentru particularitățile unei noi platforme țintă, în timp ce un program în limbaj de asamblare pe o nouă platformă își poate pierde avantajul de viteză fără a rescrie manual codul.
· De obicei mai puține biblioteci disponibile în comparație cu limbajele moderne de programare industrială.
· Nu există portabilitate de programe pe computere cu arhitectură și set de instrucțiuni diferite.

Compatibilitate
Un program conceput pentru un tip de asamblare nu poate fi compilat în altul fără o prelucrare radicală sau o conversie automată! Dar chiar și în rândul ansamblorilor de tip „lor”, există confuzie, inconsecvență și multe diferențe: Cuvinte cheie, în regulile de proiectare a listelor, în bibliotecile și fișierele de antet furnizate, etc. Cu excepția cazului în care compatibilitatea este specificată în mod explicit, programul trebuie tradus de aceștia și doar de ansamblul pentru care este destinat. În caz contrar, pregătiți-vă pentru relucrare (adică pentru adopție). Diferențele apar adesea în cele mai neașteptate locuri. Unii ansamblori înțeleg că „mov eax, x” este același cu „mov eax, [x]”, alții nu. Se poticnesc și dau o greșeală. Dar totuși nimic! Este mult mai rău când traducătorul interpretează tacit această construcție ca „mov eax, offset x”, ceea ce nu este deloc același lucru! Deci, trebuie să fii foarte, foarte atent atunci când portezi un program.

Compatibilitatea sistemului de operare. Programele orientate către MS-DOS nu numai că nu sunt transportabile, ci și neportabile. Se caracterizează prin interacțiunea directă cu hardware disponibil în NT numai de la nivelul nucleului, fără a menționa faptul că codul pe 16 biți este apelat din aplicații pe 32 de biți numai prin DPMI și chiar și atunci nu fără modificări.

Astfel, înainte de a traduce un program de asamblare, este necesar să identificați pentru ce traducător și sistem de operare este destinat! Cu fragmente de asamblare smulse din contextul „nativ”, situația este și mai gravă. De exemplu, un articol descrie o tehnică anti-depanare interesantă și oferă cod de asamblare, dar nu spune cum să-l încorporezi în programul tău. O situație familiară, nu-i așa? Difuzarea directă este imposibilă - traducătorul blestemă sălbatic, dar nu spune nimic.

Asamblarea programului

Textul pregătit reprezintă datele sursă pentru programele speciale numite asamblori. Sarcina asamblarilor este de a converti textul programului în instrucțiuni binare care pot fi executate de un microprocesor. Dacă se găsesc erori de sintaxă, nu va fi generat niciun cod de rezultat. Procesul de creare a unui fișier executabil are loc în două etape:

Asm -> .obj -> .exe / .dll / .com

În prima etapă (.asm -> .obj), fișierele de cod obiecte intermediare cu extensia .obj sunt obținute din fișierul asamblator prin compilare (fișierele inc suplimentare pot fi utilizate în acest caz). Fișierul .obj conține cod de mașină optimizat atâta timp cât nu sunt întâlnite erori de sintaxă sau semantice. Dacă se găsesc erori în fișierul sursă cu programul de limbaj de asamblare, programatorului i se oferă o listă de erori detectate, în care erorile sunt indicate cu numărul de linie în care au fost găsite. Programatorul parcurge pașii de editare și compilare până când toate erorile din fișierul sursă au fost eliminate. În această etapă, este deja posibil să se obțină un program finalizat, dar cel mai adesea îi lipsesc unele componente. Dacă compilatorul dintr-un anumit motiv (calea către un astfel de fișier este descris incorect sau fișierul lipsește) nu poate găsi fișierul inc, se emite un avertisment și fișierul obj nu va fi primit.

Asamblarea, de regulă, are loc în doi pași. În prima trecere, comenzile mnemonice, numerele zecimale și simbolurile sunt traduse în codurile mașinii corespunzătoare, se calculează cât spațiu este ocupat de care comandă, numele descoperite introduse de utilizator (constante, etichete, variabile), tipul și valoarea numerică este scrisă în tabel. Același tabel înregistrează de la care încep procedurile, adresele etichetelor, adresele de la începutul / sfârșitul segmentelor etc., în timpul celei de-a doua treceri, adresele de la începutul procedurilor sunt înlocuite, numele etichetelor sunt înlocuite cu adrese.

Ca rezultat al asamblării, se obține așa-numitul „fișier obiect”. Ca o caracteristică opțională, ansamblorul poate crea un fișier de listare a programelor.

De obicei, pentru a obține fișiere de cod obiect, trebuie să rulați programul de asamblare corespunzător (Microsoft ML.EXE și Borland TASM.EXE), specificând în Linie de comanda numele fișierului cu textul programului.

Această formă de apel este minimul necesar. Pe lângă nume fisier text, trebuie specificate opțiunile de asamblare. Informații mai detaliate despre opțiunile programului de asamblare ar trebui găsite în documentația pentru aceste programe.

Aspectul programului

Următoarea etapă (.obj -> .exe / .dll / .com) se numește linking sau linking și este utilizată pentru a înlocui numele simbolice folosite de programator cu adrese reale.

Comparați conținutul hexazecimal al OBJ și Fișier EXE pe care ai primit-o. Fișierul EXE conține aceeași secvență de octeți ca fișierul OBJ. Dar, pe lângă asta, există și: numele fișierului asamblat, versiunea asamblorului, „numele propriu” al segmentului și așa mai departe.

Acestea sunt informații de „serviciu” destinate acelor cazuri în care doriți să colectați fișierul executabil din mai multe. Când se dezvoltă aplicații mari textul sursă, de regulă, constă din mai multe module (fișiere cu texte sursă), deoarece este incomod să stocați toate textele într-un singur fișier - este dificil să navigați în ele.

Fiecare modul este compilat separat într-un fișier de cod obiect separat. Fiecare dintre aceste fișiere are propriile segmente de cod / date / stivă, care apoi trebuie combinate într-un singur întreg. Și trebuie să obținem un singur fișier executabil - cu un singur segment de cod / date / stivă. Exact asta face LINK: completează definiția legăturilor de adresă și combină, dacă este necesar, mai multe module de program într-unul singur. Și acesta cu noi este realizabil.

În plus, la modulele noastre trebuie să adăugăm codul mașinii de subrutine care implementează diverse funcții standard (de exemplu, calcularea funcțiilor matematice SIN sau LN). Astfel de funcții sunt conținute în biblioteci (fișiere cu extensia standard .LIB), care sunt fie furnizate împreună cu compilatorul, fie create independent. Prin urmare, procesul de pregătire include în mod necesar o etapă de legătură, când toate adresele necunoscute ale variabilelor sau funcțiilor partajate sunt determinate atunci când sunt asamblate separat.

Procesul de combinare a modulelor obiect într-un singur fișier este realizat de un program special de conectare sau colecție (programul LINK.EXE de la Microsoft și TLINK.EXE de la Borland), care leagă modulele obiect și codul mașinii de funcții standard, găsindu-le în biblioteci, și generează o aplicație funcțională - cod executabil pentru o anumită platformă.

Un cod executabil este un program complet cu o extensie COM, DLL sau EXE care poate fi rulat pe un computer cu sistemul de operare pentru care a fost creat programul. Numele fișierului executabil va fi numele primului fișier .OBJ. Pentru a face legătura, trebuie să tastați linia de comandă:

link prog1.obj prog2.obj sau tlink prog1.obj prog2.obj

Conținutul fișierului obiect este analizat de linker. Determină dacă programul conține linkuri externe, adică dacă programul conține instrucțiuni de apel de procedură care se află într-una din biblioteca de linkuri. Linkerul găsește aceste referințe în fișierul obiect, copiază procedurile necesare din biblioteci, le combină cu fișierul obiect și creează un fișier executabil. La fel de oportunități suplimentare linkerul poate crea un fișier de referință încrucișată care conține schița fișierului executabil rezultat.

Surse utilizate
1.https: //ru.wikipedia.org/
2.http: //natalia.appmat.ru/
3.http: //www.codenet.ru/
4.http: //wasm.ru/
5. Norton P., Souhe D. Limbaj de asamblare pentru computerul IBM. M.: Computer, 1992.

1. Când și de cine au fost inventate aparatele de perforat? Ce sarcini s-au rezolvat asupra lor?

2. Ce este un releu electromecanic? Când au fost create calculatoarele de releu? Cât de repede au avut?
3. Unde și când a fost construit primul computer? Cum se numea?
4. Care este rolul lui John von Neumann în crearea computerelor?
5. Cine a fost proiectantul primelor computere domestice?
6. Care baza elementului au fost create mașini de prima generație? Care au fost principalele lor caracteristici?
7. Pe ce element de bază au fost create mașinile de a doua generație? Care sunt avantajele lor față de prima generație de computere?
8. Ce este un circuit integrat? Când au fost create primele computere bazate pe circuite integrate? Cum se numeau?
9. Ce domenii noi de aplicații informatice au apărut odată cu apariția mașinilor de a treia generație?
10. Ce este un microprocesor? Când și unde a fost creat primul microprocesor?
11. Ce este un microcomputer și un computer personal?
12. Ce tipuri de PC-uri sunt cele mai frecvente în lume?
13. Ce este un supercomputer?
14. Ce sunt sistemele PC cluster?
15. Ce este special la computerele din a cincea generație?

Denumiți primul dispozitiv de calcul. Calculator Abak Adăugarea mașinii Abac rus Ce idee a propus în mijloc

Matematicianul englez din secolul al XIX-lea Charles Babbage?

Ideea de a crea un software controlat mașină de numărat având un dispozitiv aritmetic, un dispozitiv de control și un dispozitiv de intrare și imprimare

Ideea de creație telefon mobil

Ideea de a crea roboți controlați de computer

În ce an și unde a fost creat primul computer bazat pe tuburi de vid?

1945, SUA

1944, Anglia

1946, Franța

Pe ce bază au fost create computerele din a treia generație?

Circuite integrate

semiconductori

tuburi electronice

circuite integrate la scară foarte mare

Care a fost numele primului computer personal?

Denumiți unitatea centrală a computerului.

CPU

Unitate de sistem

Alimentare electrică

Placă de bază

Procesorul procesează informațiile prezentate:

V sistem zecimal socoteală

In engleza

In rusa

Limbajul mașinii (binar)

Pentru a introduce informații numerice și text, utilizați

Tastatură

Scanerul este folosit pentru ...

Pentru introducerea de imagini și documente text într-un computer

Pentru desen pe el cu un stilou special

Deplasarea cursorului pe ecranul monitorului

Obținerea de imagini holografice

10. Ce tip de imprimantă este potrivit pentru tipărirea documentelor financiare?

Imprimanta cu matrice

Imprimantă cu jet

Imprimanta laser

Ce tip de imprimantă este potrivit pentru imprimarea rezumatelor?

Imprimanta cu matrice

Imprimantă cu jet

Imprimanta laser

Ce tip de imprimantă este potrivit pentru imprimarea fotografiilor?

Imprimanta cu matrice

Imprimantă cu jet

Imprimanta laser

Dacă nu sunt respectate cerințele sanitare și igienice ale computerului, un efect nociv asupra sănătății umane poate fi ...

Monitor tub cu raze catodice

Monitor LCD

Panouri cu plasmă

Când opriți computerul, toate informațiile sunt șterse din ...

Memorie cu acces aleator

Hard disk

Disc laser

În ce dispozitiv de computer sunt stocate informațiile?

Memorie externa;

CPU;

Căile optice sunt mai subțiri și așezate mai dens pe ...

Disc video digital (DVD)

CD-ROM (CD-ROM)

Dispozitivele de intrare includ ...

Dispozitivele de ieșire includ ...

Tastatură, mouse, joystick, pix pix, scaner, camera digitala, microfon

Boxe, monitor, imprimantă, cască

HDD, procesor, module de memorie, placa de baza, floppy disk

Programul se numește ...

Program de calculator poate controla funcționarea computerului dacă este localizat ...

În RAM

Pe dischetă

Pe hard disk

Pe CD

Datele sunt ...

O secvență de comenzi pe care un computer le execută în timpul procesării datelor

Informații prezentate sub formă digitală și prelucrate pe computer

Date care au un nume și sunt stocate în memoria non-volatilă

Fișierul este ...

Text tipărit pe computer

Informații prezentate sub formă digitală și prelucrate pe computer

Un program sau date care au un nume și sunt stocate în memoria non-volatilă

Când formatați rapid o dischetă ...

Directorul discului este în curs de curățare

Toate datele sunt șterse

Defragmentarea discului este în desfășurare

Verificarea suprafeței discului

Când formatați complet o dischetă ...

toate datele sunt șterse

se efectuează verificarea completă a discului

directorul discului este în curs de curățare

discul devine sistem

Într-un sistem de fișiere ierarhic pe mai multe niveluri ...

Fișierele sunt stocate într-un sistem de subdosare

Fișierele sunt stocate într-un sistem care este o secvență liniară

Istoria dezvoltării tehnologiei de calcul:

1. Denumiți primul dispozitiv de calcul.
1) Abacus
2) Calculator
3) Mașină de adăugat
4) Abac rusesc

2. Ce idee a fost propusă la mijlocul secolului al XIX-lea de matematicianul englez Charles Babbage?
1) Ideea de a crea o mașină de numărat controlată de software cu un dispozitiv aritmetic, un dispozitiv de control și un dispozitiv de intrare și imprimare
2) Ideea de a crea un telefon mobil
3) Ideea de a crea roboți controlați de computer
3. Numiți primul programator de calculator.
1) Ada Lovelace
2) Serghei Lebedev
3) Bill Gates
4) Sofia Kovalevskaya

4. În ce an și unde a fost creat primul computer bazat pe tuburi de vid?
1) 1945, SUA
2) 1950, URSS
3) 1944, Anglia
4) 1946, Franța

5. Pe ce bază au fost create computerele din a treia generație?
1) Circuite integrate
2) semiconductori
3) tuburi de vid
4) circuite integrate la scară foarte mare

6. Care a fost numele primului computer personal?
1) Apple II
2) PC IBM
3) Dell
4) Corveta
Dispozitiv computer ......................... 15
1. Denumiți unitatea centrală a computerului.
1) Procesor
2) Unitatea de sistem
3) Sursa de alimentare
4) Placă de bază
2. Cum sunt înregistrate și transmise informațiile fizice pe un computer?
1) în cifre;
2) utilizarea programelor;
3) se prezintă sub formă de semnale electrice.

3. Procesorul procesează informațiile prezentate:
1) În notație zecimală
2) În engleză
3) În rusă
4) În limbajul mașinii (în binar)
4. Pentru a introduce informații numerice și text, utilizați
1) Tastatură
2) Șoricel
3) Trackball
4) Mâner
5. Cea mai importantă caracteristică dispozitivele de intrare coordonate este o rezoluție, care este de obicei 500 dpi (punct pe inch - puncte pe inch (1 inch = 2,54 cm)), ceea ce înseamnă ...
1) Când mutați mouse-ul cu un centimetru, indicatorul mouse-ului mută 500 de puncte
2) Când mutați mouse-ul cu 500 de puncte, indicatorul mouse-ului se deplasează cu un centimetru
6. Scanerul este folosit pentru ...
1) Pentru introducerea de imagini și documente text într-un computer
2) Pentru desen pe el cu un stilou special
3) Mutați cursorul pe ecranul monitorului
4) Obținerea de imagini holografice
Dispozitive de ieșire a informațiilor ................. 21
1. Ce tip de imprimantă este potrivit pentru tipărirea documentelor financiare?
1) Imprimantă cu matrice de puncte
2) Imprimantă cu jet de cerneală
3) Imprimantă laser
2. Ce tip de imprimantă este recomandabil să utilizați pentru imprimarea rezumatelor?
1) Imprimantă cu matrice de puncte
2) Imprimantă cu jet de cerneală
3) Imprimantă laser

1. Ce tip de imprimantă este potrivit pentru imprimarea fotografiilor?
1) Imprimantă cu matrice de puncte
2) Imprimantă cu jet de cerneală
3) Imprimantă laser
2. În cazul nerespectării cerințelor sanitare și igienice ale computerului, un efect nociv asupra sănătății umane poate fi ...
1) Monitorizați pe un tub catodic
2) Monitor LCD
4) Panouri cu plasmă
3. Un dispozitiv care oferă informații de înregistrare și citire se numește ...
1) Unitate de disc sau stocare

4. Când opriți computerul, toate informațiile sunt șterse din ...
4) RAM
5) Hard disk
6) Disc laser
7) Dischete
13. În ce dispozitiv computer sunt stocate informațiile?
1) Memorie externă;
2) monitor;
3) procesor;
2. Căile optice sunt mai subțiri și așezate mai dens pe ...
1) Disc video digital (DVD)
2) Compact disc (CD)
3) Dischetă
3. Pe ce disc informațiile sunt stocate pe piese concentrice, pe care alternează zone magnetizate și nemagnetizate
1) Pe o dischetă
2) Pe CD
3) Pe DVD

4. Dispozitivele de intrare includ ...

1) Hard disk, procesor, module de memorie, placă de bază, dischetă
5. Dispozitivele de ieșire includ ...
1) Tastatură, mouse, joystick, pix pix, scaner, cameră digitală, microfon
2) Boxe, monitor, imprimantă, căști
3) Hard disk, procesor, module de memorie, placă de bază, dischetă
6. Programul se numește ...

7. Un program de computer poate controla funcționarea unui computer dacă acesta este localizat ...
1) În RAM
2) Pe dischetă
3) Pe hard disk
4) Pe CD
8. Datele sunt ...
1) O secvență de comenzi pe care un computer le execută în timpul procesării datelor
2) Informații prezentate în formă digitală și prelucrate pe computer
3) Date care au un nume și sunt stocate în memoria non-volatilă
9. Un fișier este ...
1) Text tipărit pe computer
2) Informații prezentate în formă digitală și prelucrate pe computer
3) Un program sau date care au un nume și sunt stocate în memoria non-volatilă

10. Când formatați rapid o dischetă ...
1) Directorul discului este în curs de curățare
2) Toate datele sunt șterse
3) Se efectuează defragmentarea discului
4) Se efectuează o verificare conform


Să începem cu terminologia.

Codul mașinii- sistemul de comandă al unui anumit computer (procesor), care este interpretat direct de procesor. O instrucțiune este de obicei un număr întreg care este scris într-un registru de procesor. Procesorul citește acest număr și efectuează operația care se potrivește cu această instrucțiune. Acest lucru este descris în mod popular în cartea Cum să devii programator.

Limbaj de programare de nivel scăzut(limbaj de programare de nivel scăzut) este un limbaj de programare cât mai aproape de programarea în codurile mașinii. Spre deosebire de codurile mașinii, într-un limbaj de nivel scăzut, fiecare comandă nu corespunde unui număr, ci unui nume de comandă prescurtat (mnemonic). De exemplu, ADD este o prescurtare pentru ADDITION. Prin urmare, utilizarea unui limbaj de nivel scăzut simplifică mult scrierea și citirea programelor (în comparație cu programarea în codurile mașinii). Un limbaj de nivel scăzut este specific procesorului. De exemplu, dacă ați scris un program de nivel scăzut pentru procesorul PIC, puteți fi sigur că nu va funcționa cu procesorul AVR.

Limbaj de programare la nivel înalt Este un limbaj de programare cât mai apropiat de un limbaj uman (de obicei engleză, dar există limbaje de programare în limbi naționale, de exemplu, limbajul 1C se bazează pe rusă). Un limbaj la nivel înalt nu este practic legat de un procesor specific sau de un sistem de operare (cu excepția cazului în care sunt utilizate directive specifice).

limbaj de asamblare Este un limbaj de programare de nivel scăzut în care vă scrieți programele. Fiecare procesor are propriul limbaj de asamblare.

Asamblator Este un program special care convertește (compilează) codul sursă al programului dvs. scris în limbaj de asamblare într-un fișier executabil (fișier cu extensia EXE sau COM). Pentru a fi precis, sunt necesare programe suplimentare pentru a crea un fișier executabil, nu doar un asamblator. Dar mai multe despre asta mai târziu ...

În majoritatea cazurilor, ei spun „asamblator”, dar înseamnă „limbaj de asamblare”. Acum știți că acestea sunt lucruri diferite și nu este pe deplin corect să spui asta. Deși toți programatorii vă vor înțelege.

IMPORTANT!
Spre deosebire de limbajele de nivel înalt, cum ar fi Pascal, BASIC, etc., FIECARE ASAMBLĂTOR are LIMBA PROPRIA ASAMBLĂTOR. Această regulă distinge în mod fundamental limbajul asamblării de limbile de nivel înalt. Codul sursă al unui program (sau pur și simplu „cod sursă”) scris într-un limbaj la nivel înalt, îl puteți compila în majoritatea cazurilor cu diferite compilatoare pentru diferite procesoare și sisteme de operare diferite. Cu sursele de asamblare, acest lucru va fi mult mai dificil. Desigur, această diferență este aproape imperceptibilă pentru diferite asamblări care sunt proiectate pentru aceleași procesoare. Faptul este că pentru FIECARE PROCESOR există ASAMBLATOR PROPRIU și LIMBA ASAMBLATOR PROPIE. În acest sens, programarea în limbaje de nivel înalt este mult mai ușoară. Cu toate acestea, trebuie să plătești pentru toate plăcerile. În cazul limbajelor de nivel înalt, putem întâlni lucruri de genul marime mai mare fișier executabil, performanță mai slabă etc.


În această carte, vom vorbi doar despre programarea pentru computere cu procesoare Intel (sau compatibile). Pentru a testa în practică exemplele date în carte, veți avea nevoie de următoarele programe (sau cel puțin unele dintre ele):

  1. . Program bun mai ales pentru începători. Include un editor sursă și alte lucruri utile. Funcționează pe Windows, deși programele sunt scrise sub DOS. Din păcate, programul costă bani (dar merită))). Consultați http://www.emu8086.com pentru detalii.
  2. - Turbo Assembler de la Borland. Puteți crea programe atât pentru DOS, cât și pentru Windows. De asemenea, costă bani și nu mai este suportat în acest moment (iar Borland nu mai există). În general, este un lucru bun.
  3. - Assembler de la Microsoft (înseamnă MACRO assembler, nu Microsoft Assembler, așa cum cred mulți neinițiați). Poate cel mai popular asamblator pentru procesoarele Intel. Este încă acceptat. Program shareware. Adică, dacă îl cumpărați separat, atunci va costa bani. Dar este disponibil gratuit pentru abonații MSDN și este inclus în suita Visual Studio a Microsoft.
  4. - asamblator de la Watcom. Ca toate celelalte, are avantaje și dezavantaje.
  5. - are capacități modeste, dar are un mare plus - este inclus în setul standard de Windows. Căutați-l în folderul WINDOWS \ COMMAND sau WINDOWS \ SYSTEM32. Dacă nu îl găsiți, atunci în alte foldere din directorul WINDOWS.
  6. De asemenea, este de dorit să aveți unele. Nu faceți rău și managerul de fișiere DOS, de exemplu Volkov Commander (VC) sau Norton Commander (NC). Ele pot fi, de asemenea, utilizate pentru a vizualiza codurile hexazecimale ale fișierului, dar nu pot fi editate. Există destul de mulți editori hexazecimali gratuiți pe Internet. Iată una: McAfee FileInsight v2.1. Același editor poate fi folosit pentru a lucra cu codurile sursă ale programelor. Cu toate acestea, îmi place să o fac mai bine cu următorul editor:
  7. Editor de text. Este necesar pentru scrierea codului sursă al programelor dvs. Pot recomanda editor gratuit PSPad, care acceptă multe limbaje de programare, inclusiv limbajul de asamblare.
Toate programele (și exemplele de programe) prezentate în această carte au fost testate pentru funcționare. Și aceste programe sunt folosite pentru implementarea eșantionului de programe din această carte.

Și încă un lucru - codul sursă scris, de exemplu, pentru Emu8086, va diferi ușor de codul scris, de exemplu, pentru TASM. Aceste diferențe vor fi discutate.

Majoritatea programelor din carte sunt scrise pentru. În primul rând, deoarece acest asamblator este cel mai popular și încă acceptat. În al doilea rând, deoarece este livrat cu MSDN și suita Visual Studio a Microsoft. Și în al treilea rând, pentru că sunt mândru proprietar al unei copii licențiate a MASM.

Dacă aveți deja un ansamblu care nu este inclus în lista de mai sus, atunci va trebui să-i aflați singuri sintaxa și să citiți manualul de utilizare pentru a afla cum să lucrați corect cu acesta. Dar recomandările generale date în această carte vor fi adevărate pentru orice (bine sau aproape orice) asamblator.

Pentru ca mașina să poată executa comenzi umane la nivel hardware, este necesar să setați o anumită succesiune de acțiuni în limbajul „zerouri și unele”. Asamblatorul va deveni asistent în această chestiune. Este un utilitar care funcționează cu traducerea comenzilor în limbajul mașinii. Cu toate acestea, scrierea unui program este un proces foarte laborios și complex. Acest limbaj nu este destinat să creeze acțiuni ușoare și simple. În acest moment, orice limbaj de programare utilizat (Asamblorul funcționează excelent) vă permite să scrieți sarcini speciale eficiente care afectează foarte mult funcționarea hardware-ului. Scopul principal este de a crea microinstrucțiuni și coduri mici. Acest limbaj oferă mai multe posibilități decât, de exemplu, Pascal sau C.

O scurtă descriere a limbilor de asamblare

Toate limbajele de programare sunt împărțite în niveluri: scăzut și înalt. Oricare din sistemul sintactic al „familiei” lui Assembler diferă prin faptul că combină simultan unele dintre avantajele celor mai răspândite și moderne limbi. Au în comun cu alții că sistemul computerizat poate fi utilizat pe deplin.

O caracteristică distinctivă a compilatorului este ușurința sa de utilizare. În acest sens, acesta diferă de cele care funcționează numai cu niveluri ridicate. Dacă țineți cont de un astfel de limbaj de programare, Assembler este de două ori mai rapid și mai bun. Nu durează prea mult să scrii un program ușor în el.

Pe scurt despre structura limbajului

Dacă vorbim în general despre munca și structura funcționării limbajului, putem spune cu siguranță că comenzile sale corespund pe deplin cu cele ale procesorului. Adică, Assembler folosește codurile mnemonice pe care oamenii le pot conveni să scrie.

Spre deosebire de alte limbaje de programare, Assembler folosește etichete specifice în loc de adrese pentru a scrie locații de memorie. Acestea sunt traduse în așa-numitele directive împreună cu procesul de execuție a codului. Acestea sunt adrese relative care nu afectează funcționarea procesorului (nu sunt traduse în limbajul mașinii), dar sunt necesare pentru recunoaștere de către mediul de programare însuși.

Fiecare linie de procesor are propria sa. În această situație, orice proces, inclusiv cel tradus, va fi corect

Limbajul asamblării are mai multe sintaxe, care vor fi discutate în articol.

Plusuri ale limbajului

Cea mai importantă și convenabilă caracteristică a limbajului de asamblare va fi aceea că puteți scrie orice program pentru procesor în acesta, care va fi foarte compact. Dacă codul se dovedește a fi uriaș, atunci unele procese sunt redirecționate către RAM... În același timp, realizează totul suficient de repede și fără eșecuri, cu excepția cazului în care, desigur, sunt controlate de un programator calificat.

Driverele, sistemele de operare, BIOS-ul, compilatoarele, interpreții etc. sunt toate programe în limbaj de asamblare.

Când utilizați un dezasamblator care se traduce de la mașină la mașină, puteți înțelege cu ușurință cum funcționează această sau acea activitate de sistem, chiar dacă nu există nicio explicație pentru aceasta. Cu toate acestea, acest lucru este posibil numai dacă programele sunt ușoare. Din păcate, este destul de dificil să înțelegi codurile non-banale.

Contra limbii

Din păcate, este dificil pentru programatorii începători (și adesea profesioniști) să analizeze limbajul. Asamblatorul necesită descriere detaliata comandă necesară. Necesitatea utilizării instrucțiunilor mașinii crește probabilitatea acțiunilor eronate și complexitatea execuției.

Pentru a scrie chiar și cel mai mult program simplu, programatorul trebuie să fie calificat, iar nivelul său de cunoștințe este suficient de ridicat. Specialistul mediu, din păcate, scrie deseori coduri proaste.

Dacă platforma pentru care este creat programul este actualizată, atunci toate comenzile trebuie rescrise manual - acest lucru este cerut de limba în sine. Asamblatorul nu acceptă funcția de reglare automată a stării proceselor și înlocuirea oricăror elemente.

Comenzi de limbă

După cum sa menționat mai sus, fiecare procesor are propriul set de instrucțiuni. Cele mai simple elemente recunoscute de orice tip sunt următoarele coduri:


Folosind directive

Programarea microcontrolerelor în limbaj (Assembler permite și face față bine cu funcționarea) la cel mai scăzut nivel în cele mai multe cazuri se termină bine. Cel mai bine este să utilizați procesoare constrânse de resurse. Pentru tehnologie pe 32 de biți limbaj dat se potrivește perfect. Puteți vedea deseori directive în coduri. Ce este asta? Și pentru ce se folosește?

În primul rând, trebuie să subliniați că directivele nu sunt traduse în limbajul mașinii. Ele guvernează modul în care funcționează compilatorul. Spre deosebire de comenzi, acești parametri, având diverse funcții, diferă nu datorită diferitelor procesoare, ci datorită unui alt traducător. Printre directivele principale se numără următoarele:


originea numelui

De ce limba și-a primit numele - „Asamblator”? Vorbim despre un traducător și un compilator, care criptează date. În limba engleză, Assembler nu înseamnă altceva decât un asamblator. Programul nu a fost asamblat manual, a fost utilizată o structură automată. Mai mult, în acest moment, diferența dintre termeni a dispărut deja în rândul utilizatorilor și al specialiștilor. Limbajul de asamblare este adesea denumit limbaje de programare, deși este doar un utilitar.

Datorită numelui colectiv general acceptat, unii oameni au decizia eronată că există un singur limbaj de nivel scăzut (sau norme standard pentru acesta). Pentru ca programatorul să înțeleagă despre ce structură vorbim, este necesar să clarificăm pentru ce platformă este utilizat un anumit limbaj de asamblare.

Instrumente macro

Limbajele de asamblare, care sunt relativ recente, au macro-uri. Acestea fac programul mai ușor de scris și de rulat. Datorită prezenței lor, traducătorul execută codul scris de multe ori mai repede. Când creați o selecție condițională, puteți scrie un bloc imens de comenzi, dar este mai ușor să utilizați instrumentele macro. Acestea vă vor permite să comutați rapid între acțiuni în caz de condiție sau neîndeplinire.

Atunci când se utilizează directive ale limbajului macro, programatorul primește macrocomenzi de asamblare. Uneori poate fi utilizat pe scară largă, iar uneori funcționalitatea sa este redusă la o singură comandă. Prezența lor în cod facilitează lucrul cu acesta, îl face mai clar și mai intuitiv. Cu toate acestea, ar trebui să fiți în continuare atenți - în unele cazuri, macro-urile, dimpotrivă, înrăutățesc situația.