Pagina iniziale | Navigazione |
Google

Assembly

L'Assembly (spesso confuso con l'Assembler, che è in realtà il programma che si occupa della compilazione di un programma scritto in Assembly) è tra i linguaggi di programmazione quello più vicino al linguaggio macchina vero e proprio. Infatti, quasi ogni istruzione Assembly ha una sua traduzione diretta in bit comprensibili dal dispositivo elettronico (in genere una CPU) che si sta programmando.

Non c'è un solo assembly

A causa di questa "vicinanza" all'hardware, non esiste un unico linguaggio Assembly. Al contrario, ogni CPU o famiglia di CPU ha un suo proprio assembly, diverso dagli altri. Ad esempio, sono linguaggi Assembly ben diversi quelli per i processori Intel x86, per i Motorola 68000 e per i Dec Alpha. Questo significa che conoscere un certo linguaggio Assembly significa saper scrivere programmi solo su una determinata CPU o famiglia di CPU. Passare ad altre CPU però è molto facile, perché il meccanismo di funzionamento è molto simile ed occorre solo imparare nuovi codici mnemonici e qualche particolarità del nuovo processore.

Molto meno facile è invece portare un programma scritto in assembly su macchine con processori diversi o con architetture diverse: quasi sempre significa dover riscrivere il programma da cima a fondo, perché i linguaggi assembly dipendono completamente dalla piattaforma per cui sono stati scritti. Molti compilatori assembly supportano sistemi di macro, per ovviare in parte a questo problema, ma è un rimedio poco efficace. Inoltre l'assembly non ha alcun controllo sui tipi, costringe il programmatore ad occuparsi di ogni singolo dettaglio della gestione della macchina e richiede molta disciplina e un esteso lavoro di commento per non scrivere codice assolutamente illeggibile. A fronte di questi pesanti svantaggi l'assembly offre una efficienza senza pari e il controllo completo e assoluto sull'hardware: i programmi in assemby sono, in linea di principio, i più piccoli e veloci che sia possibile scrivere su una data macchina.

Scrivere (buon) codice in assembly è lento, difficile e quindi molto costoso, soprattutto in prospettiva (future modifiche): per questo, raramente l'assembly è il solo linguaggio usato in un progetto, a meno che questo non sia molto piccolo. In genere si usa in combinazione con altri linguaggi: la maggior parte del codice viene scritta in un linguaggio ad alto livello, mentre le parti più critiche (per motivi di velocità o di sicurezza) si scrivono in assembly.

RISC e CISC

Il linguaggio assembly costituisce il cosiddetto ISA (Instruction Set Architecture) di un processore. I diversi ISA possono essere divisi in due grandi gruppi: i RISC (Reduced Instruction Set Chip) e i CISC (Complex Instruction Set Chip). Il primo gruppo tende ad avere operazioni semplici e veloci, con grande abbondanza di registri per memorizzare i risultati intermedi. Il secondo mette a disposizione del programmatore istruzioni più complesse, che a volte mimano quelle dei linguaggi di livello più alto (ad esempio, la copia di stringhe nei processori x86). In entrambi i casi, i migliori set di istruzioni tendono ad essere quelli cosiddetti ortogonali, dove i diversi modi di indirizzamento e i diversi registri possono essere usati indifferentemente in tutte le istruzioni. Famosi set di istruzioni ortogonali sono quelli del Motorola 68000 (CISC) e del MIPS (RISC). L'ISA dei processori Intel x86 era originariamente ben poco ortogonale, ed è andata via via migliorando.

La distinzione tra set di istruzioni RISC e CISC è oggi un po' anacronistica, perché la maggior parte dei processori sono oggi dei CRISP, cioè un misto fra i due. Inoltre, alcuni processori traducono l'ISA originale in un set di istruzioni interno, per ragioni diverse e con modalità diverse: nel caso dell'Intel Pentium 4 e dell'AMD Athlon, è per liberarsi dalle limitazioni causate da un'ISA ormai arcaica, e la conversione è fatta da decoder hardware. Nel caso dei processori Transmeta, è per poter eseguire ISA di diversi processori come se fossero proprie, e la traduzione è fatta da routine software memorizzate in una ROM del processore.

Link esterni

[[Categoria:Informatica]

GNU Fdl - it.Wikipedia.org




Google | 

Enciclopedia |  La Divina Commedia di Dante |  Mappa | : A |  B |  C |  D |  E |  F |  G |  H |  I |  J |  K |  L |  M |  N |  O |  P |  Q |  R |  S |  T |  U |  V |  W |  X |  Y |  Z |