# Assembly/Introduzione

Assembly
Copertina Tutti i moduli · Sviluppo
* IntroduzioneAssembly/Introduzione
** Perché non studiare l'AssemblyAssembly/Introduzione/Perché non studiare l'Assembly
** Perché studiare l'AssemblyAssembly/Introduzione/Perché studiare l'Assembly
* Rappresentazione datiAssembly/Rappresentazione dati
* Algebra Booleana
* Organizzazione di sistema (tanta noiosa teoria)
** Componenti base di sistema
** Il tempo del Sistema
** La famiglia 80x86
** Input/Output
* Organizzazione e accesso alla memoria
** Introduzione
** Organizzazione della memoria in un x86
** Organizzazione dei segmenti in un x86
** Indirizzi di memoria in un x86
** Registri di segmento in un x86
** Metodi di indirizzamento di un x86
** L'istruzione MOV
** Commenti finali sull'istruzione MOV
* ConvenzioniAssembly/Convenzioni
    Indice
Modifica il sommario

## Introduzione

Per prima cosa... Cos'è l'Assembly? L'Assembly è uno dei molti linguaggi di programmazione. Con alcune particolarità:
* L'Assembly è il linguaggio di programmazione più vicino all'hardware
* Quindi con l'Assembly possiamo fare tutto sul nostro computer
* Anche se essendo il più avanzato è sicuramente il più difficile
* Tutti gli altri linguaggi di programmazione, quando vengono compilati, vengono trasformati dal compilatore, in Assembly.
È proprio questo il lavoro di un compilatore. Esso ha lo scopo di decodificare le istruzioni del linguaggio scelto (C ad esempio) e trasformarle in linguaggio Assembly (vi sarete chiesti cosa succede quando premete il pulsantino "Compila"...)
Abbiamo detto che l'Assembly è il linguaggio più difficile da imparare. Ma allora perché sei qui? Probabilmente la risposta la trovi qui:
* Tu hai bisogno di un corso Assembly per l'università. Sei qui contro la tua volontà
* Un programmatore nella tua azienda è stato pensionato. Gran parte del suo codice è scritto in Assembly, e tu sei stato scelto per gestirlo
* Il tuo capo ti ha costretto a scrivere in Assembly
* I tuoi programmi sono grandi o lenti, e vorresti che l'Assembly ti aiutasse a tenerli sotto controllo
* Vuoi sapere come lavora un computer
* Vuoi sapere come scrivere codice efficiente
* Vuoi provare qualcosa di nuovo
Bhe, quale che sia la tua motivazione, cominciamo!

## Perché non studiare l'Assembly

L'Assembly ha una cattiva reputazione. L'impressione comune della gente sui programmatori Assembly, è che loro sono tutti pirati informatici o persone con cattive intenzioni. Qui ci sono ragioni che i programmatori danno per non usare l'Assembly:
* L'Assembly è difficile da imparare
* L'Assembly è difficile da leggere e capire
* Con l'Assembly è difficile fare debug
* L'Assembly è difficile da gestire
* Programmare Assembly è una perdita di tempo
* I compilatori moderni hanno eliminato la necessità di programmare in Assembly
* Oggi i computer sono talmente veloci che non abbiamo più bisogno di Assembly per potenziare i programmi
* L'Assembly non è portabile
Da queste righe avrete capito che l'Assembly è decisamente brutto. Questo è quello che pensa l'80% della gente che non conosce l'Assembly. In genere le persone si basano su cose sentite da amici programmatori, che non hanno capito l'Assembly :)

## Allora, perché usare l'Assembly?

* Velocità. I programmi scritti in Assembly sono molto più veloci di quelli scritti con gli HLLs (High Level Languages - Linguaggi di alto livello, come C, VB, Pascal ecc...)
* Spazio. Un programma scritto in Assembly, occupa circa la metà dello spazio necessario ad uno in HLL
* Capacità. Si possono fare cose in Assembly che gli HLLs possono solo sognare
* Conoscenza. La conoscenza dell'Assembly ti aiuterà anche con gli HLLs
Dunque il linguaggio Assembly è degno degli sforzi che starete per fare, e forse, dopo averlo conosciuto, lo userete più di quanto avreste mai pensato.

## Differenza tra Assembly e Assembler

Molti confondono questi due termini pensando che siano la stessa cosa. In realtà, Assembly è il linguaggio di programmazione, mentre Assembler è il programma che Assembla il sorgente. Torneremo più avanti su questo argomento.