Sistemi E Reti

Addizione

Emu8086 e Utilizzo dei registri x86 per eseguire somme aritmetiche semplici con verifica del Carry Flag in caso di overflow.

Durata

20 minuti

Software

emu8086

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.


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:

  1. Sostituite i valori precedenti con 200 e 100.
  2. Cliccate su Emulate.
  3. 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.





Assembly, x86, Somma, Overflow, Sistemi e Reti,