prof. Nunzio Brugaletta
LinPROG

EnneBi - Programmazione
Avanti - Indietro - Inizio

Nascita dei linguaggi: l'Assembly

Il primo linguaggio di programmazione, riconosciuto come tale, è il linguaggio Assembly. Naturalmente il computer non è in grado di eseguire un programma se non in linguaggio macchina. Il sorgente Assembly è necessario che venga convertito in linguaggio oggetto, utilizzando l'Assembler che, appunto, ha questo compito.

Per poterne esaminare le caratteristiche, si riporta un esempio di programma scritto in Assembly.

section .bss
        somma:  resw 1  ;variabile per risultato

section .text
    global _start       ;necessario al linker

_start:                 ;entry point del programma

        mov  eax,2      ;mette 2 in un registro della CPU
        mov  ebx,3      ;mette 3 in un registro della CPU
        add  eax,ebx    ;somma i due numeri 
        mov  somma,eax  ;conserva in memoria il risultato
        mov  eax,1      ;chiamata al sistema (sys_exit)
        int  80h        ;chiama il kernel

Da un esame, anche generale, del listato riportato si può notare:

Il modo di scrivere il programma, rispetto anche all'introduzione di codici esadecimali, è cambiato: è più semplice comprendere quello che fa il programma. L'uso intensivo dei commenti agevola ulteriormente la comprensione.

L'aspetto negativo, dal punto di vista della comprensibilità, è costituito dal fatto che, anche se scritte in modo diverso ad ogni istruzione in linguaggio Assembly corrisponde una istruzione in linguaggio macchina. Il programmatore è costretto a tradurre l'algoritmo, per come lo concepisce lui, in sequenze di istruzioni che seguono la logica della macchina: l'Assembly è, infatti, una rappresentazione simbolica del linguaggio macchina e, per questo motivo, viene considerato un linguaggio a basso livello, intendendo in tale modo affermarne la vicinanza con il linguaggio macchina. Spesso si dice che l'Assembly è un linguaggio di seconda generazione.

Un'altra caratteristica peculiare dell'Assembly è il fatto che, più che di un linguaggio bisognerebbe parlare, più propriamente, di un insieme di dialetti. Essendo, infatti legato indissolubilmente al linguaggio macchina, varia da CPU a CPU. Per esempio il linguaggio macchina della CPU1 potrebbe supportare operazioni a tre operandi che, invece, non sono supportate dalla CPU2. Inoltre il legame che un programma ha con il Sistema Operativo, comporta nel caso della scrittura di un programma in Assembly, la conoscenza dei dettagli delle comunicazioni fra il programma stesso e i servizi del Sistema Operativo. Il programma di esempio termina chiamando il Sistema Operativo che riprende il controllo della macchina. La chiamata ha codice 80h in ambiente Linux, ma, per esempio, 21h in ambiente DOS e, inoltre, le convenzioni di chiamata (la penultima istruzione dell'esempio) cambiano.

Nonostante le evidenziate difficoltà nel suo utilizzo, l'Assembly, essendo l'unico linguaggio con una corrispondenza 1:1 con il linguaggio macchina, è tuttora utilizzato principalmente in ambienti in cui la velocità di esecuzione è un fattore critico. Se occorre, infatti, sfruttare tutte le potenzialità di una macchina è necessario utilizzare un linguaggio che parli direttamente alle sue componenti.



Avanti - Indietro - Inizio

http://ennebi.solira.org
ennebi@solira.org