Concetti Chiave
- La programmazione implica la scrittura di programmi, sequenze finite di istruzioni, eseguite dalla CPU per controllare l'hardware.
- Un algoritmo è una sequenza di istruzioni per risolvere un problema, mentre un programma è un algoritmo scritto in un linguaggio comprensibile dalla CPU.
- I linguaggi di programmazione si dividono in due categorie: ad alto livello, più astratti e vicini all'utente, e a basso livello, più vicini all'hardware.
- Il linguaggio macchina, composto da 0 e 1, è l'unico linguaggio direttamente comprensibile dalla CPU, e programmi in altri linguaggi devono essere tradotti in esso.
- Il linguaggio assembly, specifico per ogni architettura, viene tradotto in linguaggio macchina e richiede l'uso di strumenti come assembler e linker per l'esecuzione.
Indice
Software assembly
Spesso sentiamo parlare di programmazione da parte di esperti informatici, ma che cosa significa realmente programmare, e quale è il lavoro che svolge un programmatore? Innanzitutto chiariamo che, quando in ambito informatico si parla di programmare, si sottintende programmare la CPU. La CPU non è infatti l'unico dispositivo che può essere programmato, poiché per esempio anche una periferica può essere programmata. Programmare significa "scrivere un programma", cioè una sequenza ordinata e finita di istruzioni, utilizzando un linguaggio di programmazione. Le istruzioni devono essere eseguite dalla CPU, che ha proprio il compito di essere una macchina che non si pone domande, non ha dubbi e fa quello che "le viene detto di fare". Un programma è proprio quello che viene detto di fare alla CPU. Come sappiamo l'hardware è costituito da tutte le componenti fisiche del sistema: CPU, memorie, periferiche, bus, cavi, componenti elettroniche. Il software è costituito dai programmi che fanno funzionare l'hardware. Inoltre, occorre distinguere il significato di programma da quello di algoritmo.
Definizione di algoritmo e programma
Un algoritmo diciamo che è una sequenza finita di istruzioni volte a risolvere un problema e scritte in un linguaggio "naturale", e viene chiamato anche pseudocodice. Il programma invece è un algoritmo codificato utilizzando un determinato linguaggio di programmazione, cioè un linguaggio che può essere "compreso" e “decodificato” dalla CPU. Le istruzioni scritte in un linguaggio di programmazione vengono in gergo chiamate codice, proprio perché il linguaggio utilizzato è il codice, noto sia al programmatore sia alla CPU, con cui avviene la comunicazione tra il programmatore.In base alle caratteristiche e al livello di astrazione con cui un linguaggio codifica le istruzioni, i linguaggi di programmazione si possono classificare in linguaggi ad alto livello (per esempio C, Pascal, Java, ...) e linguaggi a basso livello. I linguaggi ad alto livello sono più vicini all'utente (programmatore) e più lontani dall'architettura fisica dell'elaboratore: hanno un livello di astrazione maggiore.
Programmare in un linguaggio
I linguaggi a basso livello sono più lontani dall'utente, ma più vicini all'hardware e dipendenti da quest'ultimo. Il linguaggio di livello più basso è il linguaggio macchina, in cui ogni istruzione è codificata come sequenza di 0 e 1. Questo è comunque l'unico linguaggio che la CPU "comprende", cioè l'unico decodificabile dalla CPU. Infatti 0 e 1 sono codifiche che descrivono lo stato fisico di un segnale, che è direttamente legato all'hardware. Questo significa che un programma scritto in un qualsiasi linguaggio, per essere eseguito, deve essere tradotto in linguaggio macchina, e questo compito viene affidato dal compilatore (o all’interprete), per i linguaggi ad alto livello, e dal programma assemblatore (assembler), per l'assembly.
Il linguaggio assembly
Poiché esistono molti linguaggi assembly, uno per ogni architettura, cominciamo partendo dal più generico assembly per capirne il funzionamento. L'assembly 8086, anche se si riferisce a una architettura ormai notevolmente evoluta, è alla base dell'assembly di tutta la famiglia x86, relativa ai microprocessori Intel, e il linguaggio ARM è attualmente molto diffuso soprattutto nei dispositivi mobili o in altri dispositivi come Raspberry. L’assembly è un linguaggio di basso livello, dipendente strettamente dall'architettura e, quindi, da come è fatto il sistema su cui deve essere eseguito. Viene tradotto in linguaggio macchina dall'assembler e caricato in memoria centrale per essere eseguito da un altro software di sistema, il loader. Un programma scritto in un linguaggio di programmazione si chiama sorgente; il codice sorgente viene assemblato al fine di produrre il codice oggetto. Il codice oggetto deve essere collegato ad altri eventuali moduli oggetto da un programma che li collega insieme: il linker.Domande da interrogazione
- Che cosa significa programmare in ambito informatico?
- Qual è la differenza tra un algoritmo e un programma?
- Come si classificano i linguaggi di programmazione?
- Qual è il ruolo del compilatore e dell'assembler?
- Che cos'è il linguaggio assembly e come funziona?
Programmare significa scrivere una sequenza ordinata e finita di istruzioni per la CPU utilizzando un linguaggio di programmazione, che la CPU eseguirà senza porre domande.
Un algoritmo è una sequenza finita di istruzioni scritte in linguaggio naturale per risolvere un problema, mentre un programma è un algoritmo codificato in un linguaggio di programmazione comprensibile dalla CPU.
I linguaggi di programmazione si classificano in linguaggi ad alto livello, che sono più vicini all'utente, e linguaggi a basso livello, che sono più vicini all'hardware.
Il compilatore traduce i linguaggi ad alto livello in linguaggio macchina, mentre l'assembler traduce il linguaggio assembly in linguaggio macchina.
Il linguaggio assembly è un linguaggio di basso livello strettamente dipendente dall'architettura del sistema, tradotto in linguaggio macchina dall'assembler e caricato in memoria per l'esecuzione.