Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2006-11-18 12:36:32.
Revizia anterioară   Revizia următoare  

Introducere in asamblare

(Creat de chris_11 la data de 2005-08-15 categoria Limbaje, autor(i) Botau Cristian)

Continut scurt:

Aceasta pagina a fost importata din infoarena1 si nu este inca prelucrata.
Sterge ==Include(file="template/raw")== cand esti multumit cu continutul paginii.

Acest articol prezinta un limbaj mai putin folosit : limbajul de asamblare. Este folosit de cele mai multe ori pentru marirea vitezei de rulare a programelor. In prima sectiune sunt prezentate cateva avantaje / dezavantaje in folosirea acestui limbaj. Apoi sunt definite notiunile elementare ce trebuie stiute inainte de a trece la tratarea limbajului propriu-zis. De asemenea, sunt prezentate cateva intructiuni si transcrieri ale unor structuri din C/Pascal in limbaj de asamblare. In final sunt comparati timpii de executie intre varianta pascal si varianta assembler ale unei proceduri de Bubble Sort.

Continut lung:

Limbajul de asamblare : avantaje si dezavantaje in folosirea lui

Desi este unul dintre cele mai vechi limbaje de programare, limbajul de asamblare este incorporat si *n cele mai noi compilatoare cum ar fi Visual C++ si Delphi. Codul de asamblare este foarte apropiat de codul executabil al programelor, asamblorul avand rolul de a codifica instructiunile din limbaj de asamblare in cod masina.

In prezent, limbajul de asamblare este din ce in ce mai putin folosit in scrierea programelor, deoarece compilatoarele de ultima generatie au functiile cele mai folosite de programatori deja scrise si optimizate in limbaj de asamblare (gen memmove, memset / fillchar, etc.) incluse in unit-uri si biblioteci. Bineinteles, daca se doreste atingerea unor timpi de executie foarte mici, folosirea limbajului de asamblare este preferabila (cand avem algoritmul de complexitate optima).

Avantaje ale limbajului de asamblare

  • Viteza foarte mare the executie a programelor (unele programe scrise si optimizate in asamblare au viteza de executie pana la 5-10 de ori mai mare decat cele scrise in C sau Pascal);
  • Marimea codului executabil este foarte mica;
  • Ajuta utilizatorul sa inteleaga mai bine cum functioneaza microprocesorul si sa scrie programe eficiente si in High Level Languages.

Dezavantaje ale limbajului de asamblare

  • nu este portabil; un program scris pentru calculatoare IBM PC nu va rula pe un Apple Macintosh (difera unele instructiuni);
  • un program in asamblare este mai greu de scris si ia mai mult timp decat un program scris in Pascal sau C;
  • un program scris in asamblare este mai greu de depanat;

Majoritatea compilatoarelor din prezent permit programatorului sa scrie anumite parti de cod sau subprograme in asamblare, astfel incat programatorul sa poata scrie in asamblare doar partea din program care se executa de cele mai multe ori, programul ruland astfel mult mai rapid. Sunt si compilatoare dedicate exclusiv limbajului de asamblare, cum ar fi TASM - Turbo Assembler (il gasiti in directorul BP/Bin), MASM - Microsoft Assembler, etc.

Pentru a scrie o secventa de limbaj de asamblare intr-un program C se foloseste cuvantul rezervat asm :

asm { instructiuni in asamblare };

iar in pascal :

asm
cod asamblare
end.

Notiuni de baza ale limbajului de asamblare

Registrii

Limbajul de asamblare este foarte apropiat de codul executabil, deci pentru ca programatorul sa fie capabil sa scrie codul in asamblare trebuie sa cunoasca modul in care functioneaza microprocesorul si modul in care acesta executa instructiunile.

Toate operatiile aritmetice/logice/acces la memorie se fac prin intermediul registrilor. Registrii microprocesorului sunt asemanatori variabilelor (pot fi initializati cu anumite valori, se pot efectua operatii asupra lor, pot fi accesati (cititi/modificati)).
Registrii microprocesorului sunt clasificati in mai multe categorii :

  • registri de uz general : eax, ebx, ecx, edx si subregistrii lor;
  • registri segment : cs (code segment), ds (data segment), es (extra segment), ss (stack segment) - sunt folositi pentru adresarea memoriei in cazul modelului de memorie segmentat
  • registrii index : esi, edi (source index, destination index);
  • registri speciali : ebp, esp, ip;

Registrii de uz general sunt folositi