Linguaggio assembly: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m -interlink errato
FrescoBot (discussione | contributi)
m Bot: spazi attorno alle parentesi e modifiche minori
Riga 220:
* OF (flag overflow) indica se l'ultima istruzione ha generato un overflow (con troncamento del bit più significativo del risultato)
 
'''Il costrutto di selezione (if, else)'''
 
La selezione è una struttura che permette di eseguire un blocco di istruzioni oppure un altro in base al verificarsi di una condizione.
Riga 240:
fine_se:
''
'''Il ciclo a controllo in coda (do...while)'''
 
L'iterazione è una struttura che permette di ripetere più volte un'istruzione sotto il controllo di una condizione.
Riga 277:
''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)'''
 
Una struttura iterativa a controllo in testa si può descrivere, ad alto livello, così:
Riga 302:
''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)'''
 
Il ciclo a contatore ha una struttura di questo tipo:
Riga 319:
decrementa CONTATORE
finché CONTATORE n > 0
''Come contatore si usa di solito il registro CX (registro contatore, appunto), perché esiste un'istruzione che esegue le ultime due istruzioni automaticamente: l'istruzione LOOP: decrementa CX e, se CX non è 0, salta all'etichetta specificata.''
''
MOV CX, 0
inizio_ciclo:
CMP CX, N
Riga 340:
Va sottolineato che nel primo esempio si ha un ciclo a controllo in testa, mentre nel secondo uno a controllo in coda, e che, sebbene il secondo sia più compatto e veloce da scrivere, possa generare degli errori, come già detto sopra, se non si sta attenti a come lo si usa, infatti in esso le istruzioni vengono eseguite almeno una volta, per cui se non si è sicuri che il numero di ripetizioni non possa mai essere zero, è meno rischioso usare il primo.
 
==L'input/output tramite l'INT 21h del DOS==
L'assembly, specialmente nel mondo dei PC, non prevede funzioni di input/output già pronte. Il programmatore deve quindi creare le proprie routine o appoggiarsi a quelle create da terze parti. Negli ambienti DOS è sufficiente porre il codice del servizio richiesto in AX ed usare l'istruzione INT 21h per richiamare il relativo [[software interrupt]], una delle caratteristiche più peculiari delle CPU Intel x86.
Tra le funzioni più comuni per l'input/output da tastiera:
Riga 359:
INT 21h ; se AX=0002h, allora stampa il carattere di codice ASCII in D
''
Come si può vedere, sia le operazioni di acquisizione che di stampa fanno rifemento ai codici di carattere ASCII. Nel caso si voglia leggere in input una cifra numerica, per risalire al valore numerico basta sottrarre il valore 30h ( 48 in decimale ) al suo codice ASCII. Infatti 30h in ASCII corrisponde al carattere "0", 31h ( 49 in decimale ) all' "1" e così via...
 
Nel caso in cui si voglia stampare una stringa: