Calcolatori elettronici/Istruzioni aritmetiche

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search
CopertinaCalcolatori elettronici/Copertina
  1. L'evoluzione dei sistemi di elaborazioneCalcolatori elettronici/L'evoluzione dei sistemi di elaborazione
  2. Il progetto di circuiti logiciCalcolatori elettronici/Il progetto di circuiti logici
  3. I processoriCalcolatori elettronici/I processori
  4. Architettura 8086Calcolatori elettronici/Architettura 8086
  5. Unità di controlloCalcolatori elettronici/Unità di controllo
  6. Introduzione alle memorieCalcolatori elettronici/Introduzione alle memorie
  7. Le memorie ad accesso casualeCalcolatori elettronici/Le memorie ad accesso casuale
  8. Le memorie cacheCalcolatori elettronici/Le memorie cache
  9. Le memorie ad accesso serialeCalcolatori elettronici/Le memorie ad accesso seriale
  10. La memoria virtualeCalcolatori elettronici/La memoria virtuale
  11. La gestione dei dispositivi input/outputCalcolatori elettronici/La gestione dei dispositivi input/output
  12. Intel 8255Calcolatori elettronici/Intel 8255
  13. Intel 8259Calcolatori elettronici/Intel 8259
  14. I busCalcolatori elettronici/I bus
  15. Le architetture a pipelineCalcolatori elettronici/Le architetture a pipeline
  16. Assembler 8086
IntroduzioneCalcolatori elettronici/Introduzione
  1. Informazioni generaliCalcolatori elettronici/Informazioni generali
  2. Istruzioni di trasferimento datiCalcolatori elettronici/Istruzioni di trasferimento dati
  3. Istruzioni aritmeticheCalcolatori elettronici/Istruzioni aritmetiche
  4. Istruzioni per il controllo del flussoCalcolatori elettronici/Istruzioni per il controllo del flusso
  5. Istruzioni per la manipolazione dei bitCalcolatori elettronici/Istruzioni per la manipolazione dei bit
  6. Le procedureCalcolatori elettronici/Le procedure
  7. Istruzioni per il controllo del processoreCalcolatori elettronici/Istruzioni per il controllo del processore
  8. Formato delle istruzioni macchina, tempi di esecuzioneCalcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione

Le operazioni e i formati supportati in campo numerico variano a seconda del processore. L'8086 supporta istruzioni per il calcolo binario (in complemento a 2) di numeri interi (non in virgola mobile) su 8, 16 ed in parte anche su 32 bit con segno e senza segno, e istruzioni per il calcolo tra numeri in formato BCD.

Istruzioni ADD e SUB[modifica]

Le istruzioni ADD e SUB supportano numeri su 8 (byte) o 16 bit (word), a patto che gli operandi abbiano uguale lunghezza. Il primo operando oltre a essere in ingresso è anche in uscita. Gli operandi non possono essere entrambi locazioni di memoria. Queste istruzioni impostano molteplici flag che possono poi essere acceduti.

Le istruzioni ADD e SUB non fanno distinzione se i due operandi in complemento a 2 sono con segno o senza segno.

Istruzione CBW[modifica]

L'istruzione CBW, priva di operandi, estende il contenuto dal registro AL su 8 bit all'intero registro AX su 16 bit. L'operazione di estensione è differente a seconda che si tratti di un numero con segno o senza segno.

Istruzione CWD[modifica]

L'istruzione CWD funziona in modo analogo all'istruzione CBW, ma passa da 16 a 32 bit, cioè da AX a DX:AX estendendo il segno.

Istruzione ADC[modifica]

L'istruzione ADC permette di sommare due operandi su 32 o 64 bit, tenendo conto del riporto lasciato nel carry flag CF dalle istruzioni ADD applicate in precedenza sulle word meno significative.

Istruzione SBB[modifica]

L'istruzione SBB funziona in maniera analoga a ADC, tenendo conto del carry flag CF lasciato dalle istruzioni SUB.

Istruzione INC e DEC[modifica]

Le istruzioni INC e DEC, di tipo CISC, incrementano o decrementano l'operando di un'unità; aggiornano tutti i flag di stato tranne il carry flag CF.

Istruzione NEG[modifica]

L'istruzione NEG cambia segno all'operando (in complemento a 2).

Istruzione MUL e IMUL[modifica]

Le istruzioni MUL e IMUL effettuano la moltiplicazione di numeri rispettivamente senza segno e con segno. L'unico operando viene moltiplicato per il contenuto di AL o di AX a seconda se l'operando è su 8 o su 16 bit, e il risultato viene memorizzato rispettivamente in AX e in DX:AX.

I flag CF e OF cambiano il loro significato: se sono entrambi 0, la parte alta del risultato è nulla.

Istruzione DIV e IDIV[modifica]

Le istruzioni DIV e IDIV, aventi un unico operando, effettuano la divisione:

  • operando su 8 bit: il contenuto del registro AX viene diviso per l'operando, e vengono memorizzati il quoziente in AL e il resto in AH;
  • operando su 16 bit: il contenuto del registro DX:AX viene diviso per l'operando, e vengono memorizzati il quoziente in AX e il resto in DX.

Se si cerca di effettuare una divisione per zero (cioè il divisore è troppo piccolo e genererebbe un quoziente troppo grande rispetto alle dimensioni del registro di destinazione), viene generato un errore e viene interrotto il programma.