Architettura 8086d
Le operazioni aritmetiche e di comparazione si applicano ai tipi byte e
word, in aritmetica binaria con e senza segno. L'aritmetica decimale sui tipi
packed e unpacked, per quanto riguarda l'addizione e la sottrazione, è
implementata in due passi: le operazioni vanno prima effettuate in aritmetica
binaria; occorre poi adoperare appositi codici di 'adjust' (AAA, DAA,
AAS, DAS), i quali effettuano la necessaria correzione sul risultato binario
per trasformarlo in decimale (l'operazione avviene estendendo alle due cifre
comprese in 8 bit il concetto sviluppato nell'adder decimale, per il quale
occorre aggiungere 6 al risultato quando esso sia compreso fra 10 e 16 e quando
l'adder binario dia riporto: in funzione dei valori dei bit 0, 3, 4, 7 e dei
riporti A (cfr.tab.2.3) fra il quarto ed il quinto bit e C complessivo, al
risultato dell'addizione va sommato 00, 06, 60, 66 ed analogamente per la sottrazione).
La moltiplicazione e la divisione si estendono allo stesso modo, ma solo per il
tipo decimale unpacked (codici di 'adjust' AAM, AAD).
Per la realizzazione dell'aritmetica in virgola mobile, l'8086d opera
congiuntamente al co-processore matematico 8087 ; oltre alla virgola
mobile, esso estende il tipo fondamentale ai 32 bit ed esegue calcoli di funzioni
matematiche di varia natura (radici quadrate, esponenziale, funzioni
trigonometriche, ecc.). in virgola mobile.
Il co-processore 8087 dispone di un banco di otto registri da 80 bit,
gestiti come uno stack circolare, il cui contentuo è acceduto mediante opportune
operazioni di push e pop. Per dare maggiore flessibilità, è comunque anche
possibile indirizzare in maniera diretta uno qualunque degli otto registri,
indicando lo spiazzamento rispetto alla cima dello stack.
La rappresentazione in memoria della virgola mobile (vedi Rappresentazione
Dati) è in singola (short real, 32 bit) o doppia precisione (long
real, 64 bit); all'interno del processore, invece, si usa l'unico formato temporary real format ad 80 bit; questo formato interno è usato
dall'8087 anche per trattare dati interi. a 32 bit (short integer) ed a 64 bit (long
integer).