- Utilizzare il set di istruzioni di un processore per semplici operazioni di calcolo
- Analizzare il comportamento dei registri e dei flag durante l'esecuzione
- Gestire situazioni di overflow mediante il controllo del Carry Flag
- Operare con rappresentazioni numeriche esadecimali e decimali
L'istruzione ADD e il registro dei Flag
Per eseguire una somma in Assembly x86 si utilizza l'istruzione ADD. Questa istruzione richiede due operandi: la destinazione e la sorgente. La sintassi corretta è
ADD destinazione, sorgente.
L'operazione eseguita è destinazione = destinazione + sorgente.
Un aspetto fondamentale da monitorare è la capacità del registro. Se la somma di due numeri supera il valore massimo rappresentabile (es. 255 per un registro a 8 bit), si verifica un Overflow. In questo caso, il processore attiva il Carry Flag (CF) all'interno del registro dei Flag.
| Scenario | Risultato nel Registro | Stato del Carry Flag (CF) |
|---|---|---|
| Somma entro i limiti | Valore corretto | 0 (Riposo) |
| Somma oltre i limiti (Overflow) | Valore "ruotato" (modulo) | 1 (Attivo) |
LABORATORIO
Esercitazione: Somma e Verifica Overflow
In questo laboratorio imparerai a sommare valori numerici e a identificare quando un risultato eccede la capacità fisica del registro.
- Software di emulazione emu8086
1 Creazione del programma di somma
Avviate emu8086, cliccate su New e selezionate COM Template. Scrivete il seguente codice per caricare due valori nei registri AL e BL ed eseguirne la somma.
ORG 100h
MOV AL, 50 ; Carica il valore decimale 50 in AL
MOV BL, 30 ; Carica il valore decimale 30 in BL
ADD AL, BL ; Somma BL ad AL (Risultato in AL)
RET
2 Analisi del Carry Flag (Caso Critico)
Modifichiamo ora i valori per forzare un superamento del limite degli 8 bit (255). Seguite questi passaggi:
- Sostituite i valori precedenti con 200 e 100.
- Cliccate su Emulate.
- Cliccate sul pulsante Flags nell'interfaccia dell'emulatore.
ORG 100h
MOV AL, 200 ; Valore vicino al limite degli 8 bit
MOV BL, 100 ; Valore che causerà il superamento
ADD AL, BL ; Somma: 300 è maggiore di 255!
RET
3 Osservazioni nel Debugger
Eseguite il codice con Single Step e rispondete alle seguenti domande osservando l'emulatore:
- Quale valore appare in AL dopo l'istruzione ADD? (Noterete che non è 300).
- Il flag C (Carry) nella finestra dei Flags è diventato rosso (1)?
- Conclusione: Se il flag Carry è 1, il risultato nel registro non è affidabile per calcoli lineari senza gestione del riporto.
4 Gestione Magazzino
Un sensore di magazzino conta i pezzi prodotti. Avete già 150 pezzi (caricati in CL) e ne arrivano altri 120 (caricati in DL).
- Scrivete il codice per sommare i due arrivi.
- Verificate se il registro scelto (8 bit) è sufficiente o se è necessario passare a un registro a 16 bit (es. CX e DX) per evitare l'overflow.