| "Descrizione" by A_Partyns (13106 pt) | 2026-Feb-02 17:49 |
Intel 8087
Definizione
L’Intel 8087 è un coprocessore matematico (Numeric Data Processor) progettato per affiancare le CPU 8086 e 8088, con lo scopo di accelerare i calcoli in virgola mobile e le funzioni matematiche più complesse. In pratica, estende l’insieme di istruzioni del sistema con il set X87 (istruzioni floating-point) e fornisce un’unità hardware dedicata per operazioni come somma, sottrazione, moltiplicazione, divisione, radice quadrata e varie funzioni trascendentali (logaritmi, esponenziali, trigonometria).
Nei sistemi dell’epoca (inclusi molti PC compatibili), l’8087 era spesso un componente opzionale: la scheda madre poteva avere uno zoccolo predisposto e l’utente lo installava solo se servivano prestazioni numeriche elevate (CAD, calcolo tecnico, fogli di calcolo avanzati, applicazioni scientifiche).

Come si integra con 8086/8088 (architettura “coprocessore”)
Il modello operativo è particolare: l’8087 non sostituisce la CPU, ma lavora “a fianco” condividendo bus e visibilità delle istruzioni. Concetti chiave:
La CPU continua a fare fetch delle istruzioni dal codice.
Quando compaiono istruzioni del set X87 (codificate attraverso opcodes “ESC”), l’8087 le riconosce e avvia l’elaborazione numerica.
Quando servono operandi in memoria o scritture di risultato, l’8087 usa i cicli bus coordinandosi con la CPU (con segnali di sincronizzazione dedicati).
In molte sequenze la CPU può proseguire con istruzioni integer mentre l’8087 lavora, ma alcune istruzioni richiedono sincronizzazione esplicita (ad esempio tramite WAIT/FWAIT), soprattutto quando il software deve assicurarsi che un risultato floating-point sia pronto.
Questo approccio permette di aggiungere capacità floating-point senza ridisegnare la CPU, mantenendo compatibilità software e scalabilità (chi non installa l’8087 usa routine software/emulazione).
Registri e modello dati (stack X87)
L’8087 introduce un file registri non “piatto” ma organizzato come stack:
8 registri floating-point ST0–ST7, dove ST0 è la cima dello stack.
Molte istruzioni operano implicitamente su ST0 (e spesso su ST1), con semantica di push/pop che semplifica certe sequenze ma richiede disciplina nella gestione dello stack.
Internamente (e spesso anche come formato memorizzabile) è usata la precisione estesa a 80 bit, utile per ridurre errori di arrotondamento intermedi.
Sul piano dei formati supportati, oltre a real a 32 bit (single) e 64 bit (double), l’8087 gestisce anche interi (16/32/64 bit) e un formato BCD packed (tipicamente usato per applicazioni dove la rappresentazione decimale controllata è importante).
Frequenza e varianti tipiche
L’8087 è stato prodotto in più versioni legate alla frequenza massima di sistema (dipendente anche dall’implementazione sulla scheda): storicamente si incontrano versioni a 5 MHz, 8 MHz e 10 MHz (con sigle di stepping/modello diverse).
Perché era importante nei sistemi dell’epoca
Abilitava prestazioni floating-point nettamente superiori al calcolo in software su 8086/8088.
Standardizzava il modello X87, poi mantenuto nei coprocessori successivi (80287, 80387) e infine integrato nelle CPU più moderne.
Permetteva una scelta economica: si acquistava l’8087 solo se il carico applicativo lo giustificava.
Schizzo dei collegamenti più importanti
┌──────────────────────────────┐ │ CPU 8086/8088 │ │ fetch istruzioni + controllo │ │ bus A/D + segnali sistema │ └──────────────┬───────────────┘ │ bus condiviso + sincronizzazione ▼ ┌──────────────────┐ │ INTEL 8087 │ │ unità X87 FPU │ │ stack ST0–ST7 │ │ 80-bit internal │ └─────────┬────────┘ │ accessi a memoria (operandi/risultati) ▼ ┌────────────────────────────────┐ │ RAM / ROM / I-O di sistema │ │ (operandi, risultati, codice) │ └────────────────────────────────┘
Tabella 1 – Dati di identificazione e specifiche (italiano)
| Caratteristica | Valore indicativo |
|---|---|
| Dispositivo | Intel 8087 (coprocessore matematico) |
| CPU host tipiche | 8086, 8088 |
| Funzione | Accelerazione calcolo floating-point e funzioni matematiche |
| Modello registri | Stack X87: ST0–ST7 (8 registri) |
| Precisione interna | Formato esteso 80 bit |
| Formati supportati | Real 32/64/80 bit, interi 16/32/64 bit, BCD packed |
| Frequenze tipiche | 5 / 8 / 10 MHz (a seconda della variante e del sistema) |
| Package tipico | 40-pin DIP (varianti storiche) |
Tabella 2 – Aspetti operativi e software (italiano)
| Aspetto | Significato pratico |
|---|---|
| Op-codes “ESC” | Meccanismo con cui le istruzioni X87 vengono riconosciute dal coprocessore |
| Sincronizzazione WAIT/FWAIT | Usata quando serve garantire che l’8087 abbia completato un’operazione prima di proseguire |
| Stack X87 | Richiede gestione disciplinata di push/pop per evitare underflow/overflow logico |
| Beneficio prestazionale | Forte su carichi numerici; minimo su software solo integer |
| Uso tipico | CAD, calcolo tecnico/scientifico, fogli di calcolo, elaborazioni numeriche |
| Opzionalità | Spesso installabile su zoccolo dedicato; non necessario per uso generico |
| Evaluate |