Linguaggio assembly: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Annullata la modifica 78999738 di 87.11.144.50 (discussione) |
|||
Riga 22:
==Caratteristiche generali dell'assembly==
L'assembly ha lo scopo generale di consentire al programmatore di ignorare il formato [[bit (informatica)|binario]] del linguaggio macchina.
Ogni [[codice operativo]] del linguaggio macchina viene sostituito, nell'assembly, da una sequenza
In secondo luogo, i dati e gli [[indirizzo di memoria|indirizzi di memoria]] manipolati dal programma possono essere scritti, in assembly, nella [[sistema di numerazione|base numerica]] più consona al momento: [[Sistema numerico esadecimale|esadecimale]], [[Sistema numerico binario|binaria]], [[Sistema numerico decimale|decimale]], [[Sistema numerico ottale|ottale]] ma anche in forma simbolica, utilizzando stringhe di testo (identificatori).
Il programma assembly risulta in questo modo relativamente più [[leggibilità|leggibile]] di quello in linguaggio macchina, con il quale mantiene però un totale (o quasi totale) [[isomorfismo]].
Riga 210 ⟶ 208:
</source>
Per la maggioranza delle applicazioni ''mainstream'', è ormai convinzione comune nella comunità dei programmatori applicativi che fattori come le ottimizzazioni generate automaticamente dai compilatori nei linguaggi di più elevato livello, l'evoluzione di librerie a loro volta sempre più ottimizzate (almeno in linea di principio) e la sempre maggiore potenza elaborativa delle piattaforme comunemente diffuse rendano meno necessario rispetto al passato il ricorso alla verticalizzazione tramite assembly inline o moduli assembly, anche in favore della [[
==Strutture di controllo in Assembly x86==
Riga 249 ⟶ 247:
istruzioni
finché condizione
''in assembly, attraverso la logica dei salti, viene rappresentato così:
''
inizio_ciclo:
istruzioni
Jcondizione inizio_ciclo
''esempio:
''
MOV AX, 0000h
Riga 277 ⟶ 275:
CMP AX, 000Ah
JB inizio_ciclo ; salta se minore (invece di salta se non uguale)
''In questo modo abbiamo risolto il problema del ciclo infinito. Tuttavia, a causa del fatto che la sequenza viene eseguita almeno una volta, in genere si evita il ciclo a controllo in coda e si utilizza invece quello a controllo in testa.
'''Il ciclo a controllo in testa (while)'''
Riga 286 ⟶ 284:
istruzioni
fine ciclo
''Equivale alla while (condizione) { sequenza } del C.
in assembly:
''
Riga 294 ⟶ 292:
JMP inizio_ciclo
fine_ciclo
''esempio:
''
inizio_ciclo:
Riga 302 ⟶ 300:
JMP inizio_ciclo
fine_ciclo
''La differenza tra questa struttura e quella a controllo in coda sta nel fatto che se la condizione è inizialmente verificata, la sequenza di istruzioni non viene eseguita nemmeno una volta.
'''Il ciclo a contatore (for)'''
Riga 313 ⟶ 311:
incrementa CONTATORE
fine ciclo
''Possiamo utilizzare un ciclo a contatore se vogliamo ripetere un blocco di istruzioni per un numero di volte noto a priori.
i cicli in assembly sono in genere a decremento:
''
Riga 355 ⟶ 353:
MOV AH, 01h ; servizio 01h
INT 21h ; se AX=0001h, allora in AL va il codice ASCII del tasto premut
''E volendo poi stamparlo:
''
MOV DL,AL ; copio il codice ASCII del tasto letto il DL
|