Linguaggio assembly: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Annullata la modifica 80463087 di 5.170.134.188 (discussione) |
m ., typos fixed: h ; → h; (2), h ; → h; (3) |
||
Riga 18:
|sito_web =
}}
Il '''linguaggio assembly''' (da non confondersi con Assembler, che invece indica il programma assemblatore e '''non''' il linguaggio), detto anche '''linguaggio assemblativo''', è, tra i [[linguaggio di programmazione|linguaggi di programmazione]], quello più vicino al [[linguaggio macchina]] vero e proprio, pur essendo [[Linguaggio macchina#Assembly|differente]] rispetto a quest'ultimo. Erroneamente viene spesso chiamato "[[assembler]]", ma come già accennato quest'ultimo termine identifica solo il [[programma (informatica)|programma]] "assemblatore" che converte il linguaggio assembly in linguaggio macchina.
==Caratteristiche generali dell'assembly==
Riga 50:
* Ha ampiamente senso creare programmi interamente in assembly destinati ad [[hardware]] caratterizzato architetturalmente da documentazione esaustiva, grande predicibilità, stabilità e scarsa variabilità temporale del design: per esempio, si possono citare gli ''home computer'' degli [[anni 1980|anni ottanta]], come i [[Commodore]] [[Vic-20]] e [[Commodore 64|C64]] o il [[Sinclair ZX Spectrum]].
* Ha parimenti senso, ed un forte riscontro nella pratica invalsa negli ultimi trenta anni, operare prevalentemente o esclusivamente in assembly nel vastissimo mercato dei [[sistemi embedded]], per la programmazione di [[microcontrollore|microcontroller]] e [[Digital Signal Processor|DSP]], eventualmente anche sotto forma di ''core'' implementati tramite [[Application specific integrated circuit|ASIC]], [[CPLD]] ed [[Field programmable gate array|FPGA]], al fine di massimizzare performance e rispetto dei vincoli temporali, minimizzando nel contempo il ''footprint''. Ciò trova riscontro a tutti i livelli della filiera produttiva, a partire dalla progettazione dei chip e del relativo linguaggio utilizzando [[instruction set|ISA]] di tipo [[Reduced instruction set computer|RISC]] e fortemente ortogonali, la cui ottimizzazione (in spazio o in performance) è altamente semplificata. Questo approccio è fondamentale in quanto consente grandi economie di scala nei progetti tipici del mondo ''embedded'', caratterizzati dalla capacità di assorbire costi iniziali (''NRE, non-recurrent engineering costs'') anche elevati, purché finalizzati ad una forte compressione del costo unitario del prodotto finale, anche per volumi medio-bassi.
Riga 99 ⟶ 98:
END
</source>
Questo invece è l'esempio del programma scritto per sintassi AT&T (per le architetture [[UNIX]] [[GNU]])
<source lang="asm">
.section .data
Riga 163 ⟶ 158:
</source>
Su alcune architetture tali fasi risultano invece essere quattro (ad esempio, nei PIC Microchip, negli Intel 8051 e in numerosissimi core analoghi), da cui risulta anche l'effettivo rapporto tra velocità di clock ossia frequenza del quarzo esterno (es. 10
Si ricordi infine che talune istruzioni, tra le quali tipicamente i salti incondizionati, richiedono su un numero notevole di piattaforme (sia RISC che CISC, concepite in varie epoche) un numero di cicli superiore alle altre, a causa delle operazioni accessorie (non parallelizzabili) richieste dall'aggiornamento del registro IP e di eventuali code di prefetch interne.
Riga 179 ⟶ 174:
/* Acquisizione del valore numerico */
printf("Inserisci un valore compreso tra -32768 e 32768: ");
scanf("%d", &a);
/* Visualizzazione del messaggio di risposta */
|