Autor: Gheorghe Musca
An aparitie: 2019
Limbajul de asamblare (ASM)
Limbajul de asamblare (ASM) permite intelegerea la nivel de amanunt a ceea ce se intampla in realitate intr-un calculator. Familiarizarea cu un asemenea limbaj este mai mult decat benefica pentru un programator, contribuind la eficienta programelor dezvoltate, indiferent de limbajul utilizat.
Exista mai multe motive pentru care programarea in ASM este necesara. Codul generat in ASM se executa in general foarte rapid.
Unele module de program trebuie implementate in ASM datorita acestei viteze de lucru. Uneori, o parte a unui program este scrisa intr-un limbaj de nivel inalt, iar modulele critice sunt scrise ca proceduri ASM, apelate la randul lor de modulele de nivel inalt.
Pe de alta parte, exista situatii in care e nevoie de acces direct la dispozitivele de intrare / iesire sau locatii fizice de memorie, iar aceste operatii nu pot fi executate din unele limbaje de nivel inalt.
De exemplu, la calculatoarele personale, programele TSR si rutinele de tratare a intreruperilor sunt aproape totdeauna scrise in ASM.
Ce ofera limbajul de asamblare (ASM)?
Pe scurt, limbajul de asamblare ofera viteze de executie si acces la hardware care nu pot fi disponibile (cel mai adesea) in limbajele de nivel inalt.
Un alt aspect important este cel al dezvoltarii de programe pentru echipamente dedicate. Nu toate programele executabile sunt destinate calculatoarelor de uz general.
Dezvoltarea masiva a microprocesoarelor a facut ca aceasta sa controleze in prezent functionarea celor mai diverse obiecte tehnice, de la masini de gatit sau de spalat rufe, pana la echipamente de control industrial sau pentru comanda avioanelor.
Imensa majoritate a programelor pentru asemenea echipamente dedicate, este scrisa in limbaj de asamblare, pentru ca intr-un asemenea context, ceea ce conteaza este viteza de executie si volumul foarte limitat de memorie.
Structura cursurilor
Capitolul 1 – Introducere. Necesitatea limbajului de asamblare
- Notiuni introductive de hardware. Registre. Stiva.
- Reprezentari interne ale datelor
- Tipuri de date utilizate in limbaj de asamblare
Capitolul 2 – Setul de instructiuni 8086
- Instructiuni de transfer
- Instructiuni aritmetice si logice
- Instructiuni pentru operatii cu siruri de caractere / cuvinte
- Instructiuni de apel de procedura si de salt
- Intreruperi
- Instructiuni pentru controlul procesului
- Dezvoltarea programelor in limbaj de asamblare
Capitolul 3 – Procesoare de 32 de biti – Coprocesoare matematice
- Arhitectura procesoarelor de 32 de biti
- Arhitectura coprocesoarelor matematice
Capitolul 4 – Structurarea programelor. Definirea si initializarea datelor. Operatori
- Segmentare. Directive pentru definirea segmentelor
- Definirea simplificata a segmentelor
- Directive pentru legarea modulelor
- Contoare de locatii si directiva ORG
- Definirea si initializarea datelor
- Definirea etichetelor. Directiva LABEL
- Definirea structurilor. Operatii specifice
- Definirea inregistrarilor. Operatii specifice
- Operatori in limbajul de asamblare
Capitolul 5 – Macroinstructiuni
- Scopul macroinstructiunilor. Definire si expandare
- Macroinstructiuni cu parametri
- Controlul numarului de parametri actuali
- Directive de control al listarii. Etichete in macroinstructiuni
- Macroinstructiuni repetitive
- Operatori specifici
- Invocare recursiva de macroinstructiuni
- Definirea macroinstructiunilor in macroinstructiuni
- Tehnici avansate de utilizare a macroinstructinilor
Capitolul 6 – Tehnici de programare in limbaj de asamblare
- Decizia simpla si decizia compusa. Evaloarea conditiilor logice
- Cicluri cu test la partea superioara si inferioara
- Selectia. Tabele de salt sau de apel proceduri
- Transferul parametrilor catre proceduri
- Intoarcerea datelor de catre proceduri
- Proceduri cu zone de date proprii (variabile locale)
- Variabile locale definite in stiva
- Variabile locale alocate static
Bibliografie:
Frumos… Din pacate chiar si la data editiei – programarea in asamblare era de mult depasita. Eu personal am facut analiza pe codul generat de catre compilatoarele de C/C++ si pot spune ca nici un om nu poate optimiza la fel de bine ca un compilator. Pe de alta parte, familia x86 este una care nu este tocmai facuta pentru acest programare si, nici macar un procesor suficient de flexibil pentru o programare „inteligenta” in asamblare. Cine vrea sa programeze la acest nivel ar fi mai bine sa se orienteze catre microcontrolere. PS: cele doua viodeoclipuri asociate cartii si facute de indieni spun totul despre nivelul cartii… insa probabil ca inca se mai preda la cibernetica si poli asa ca… o carte buna.