Calcolatori elettronici/Istruzioni aritmetiche: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{Calcolatori elettronici}} Le operazioni e i formati supportati in campo numerico variano a seconda del processore. L'8086 supporta istruzioni per il calcolo binario (in complement...
 
Gian BOT (discussione | contributi)
m Bot: sostituzione tag obsoleti
 
Riga 2:
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 <ttcode>ADD</ttcode> e <ttcode>SUB</ttcode>==
Le istruzioni <ttcode>ADD</ttcode> e <ttcode>SUB</ttcode> 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 <ttcode>ADD</ttcode> e <ttcode>SUB</ttcode> non fanno distinzione se i due operandi in complemento a 2 sono con segno o senza segno.
 
==Istruzione <ttcode>CBW</ttcode>==
L'istruzione <ttcode>CBW</ttcode>, 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 <ttcode>CWD</ttcode>==
L'istruzione <ttcode>CWD</ttcode> funziona in modo analogo all'istruzione <ttcode>CBW</ttcode>, ma passa da 16 a 32 bit, cioè da AX a DX:AX estendendo il segno.
 
==Istruzione <ttcode>ADC</ttcode>==
L'istruzione <ttcode>ADC</ttcode> permette di sommare due operandi su 32 o 64 bit, tenendo conto del riporto lasciato nel carry flag CF dalle istruzioni <ttcode>ADD</ttcode> applicate in precedenza sulle word meno significative.
 
==Istruzione <ttcode>SBB</ttcode>==
L'istruzione <ttcode>SBB</ttcode> funziona in maniera analoga a <ttcode>ADC</ttcode>, tenendo conto del carry flag CF lasciato dalle istruzioni <ttcode>SUB</ttcode>.
 
==Istruzione <ttcode>INC</ttcode> e <ttcode>DEC</ttcode>==
Le istruzioni <ttcode>INC</ttcode> e <ttcode>DEC</ttcode>, di tipo CISC, incrementano o decrementano l'operando di un'unità; aggiornano tutti i flag di stato tranne il carry flag CF.
 
==Istruzione <ttcode>NEG</ttcode>==
L'istruzione <ttcode>NEG</ttcode> cambia segno all'operando (in complemento a 2).
 
==Istruzione <ttcode>MUL</ttcode> e <ttcode>IMUL</ttcode>==
Le istruzioni <ttcode>MUL</ttcode> e <ttcode>IMUL</ttcode> 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 <ttcode>DIV</ttcode> e <ttcode>IDIV</ttcode>==
Le istruzioni <ttcode>DIV</ttcode> e <ttcode>IDIV</ttcode>, 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.