| "Descrizione" by A_Partyns (13106 pt) | 2026-Feb-02 17:51 |
Intel 8087
Definition
The Intel 8087 is a math coprocessor (Numeric Data Processor) designed to work alongside the CPU 8086 and 8088, with the goal of accelerating floating-point calculations and more complex mathematical functions. In practice, it extends the system’s instruction set with the X87 (floating-point) instruction set and provides dedicated hardware for operations such as addition, subtraction, multiplication, division, square root, and several transcendental functions (logarithms, exponentials, trigonometry).
In systems of that era (including many PC compatibles), the 8087 was often an optional component: motherboards could include a dedicated socket, and users installed it only if they needed higher numeric performance (CAD, technical computing, advanced spreadsheets, scientific applications).

How it integrates with 8086/8088 (coprocessor architecture)
The operating model is distinctive: the 8087 does not replace the CPU, but works “alongside” it, sharing the bus and observing the instruction stream. Key concepts:
The CPU continues fetching instructions from the code stream.
When X87 instructions appear (encoded via “ESC” opcodes), the 8087 recognizes them and starts the numeric computation.
When memory operands are needed or results must be stored, the 8087 performs bus cycles coordinated with the CPU (using dedicated synchronization signals).
In many sequences the CPU can continue executing integer instructions while the 8087 is working, but some cases require explicit synchronization (for example via WAIT/FWAIT), especially when software must ensure a floating-point result is ready.
This approach adds floating-point capability without redesigning the CPU, preserves software compatibility, and supports scalability (systems without an 8087 rely on software routines/emulation).
Registers and data model (X87 stack)
The 8087 introduces a register file organized as a stack rather than a flat set:
8 floating-point registers ST0–ST7, where ST0 is the top of stack.
Many instructions implicitly operate on ST0 (often also ST1), with push/pop semantics that can simplify certain sequences but requires disciplined stack management.
Internally (and often also as a storable format) it uses 80-bit extended precision, which helps reduce intermediate rounding error.
Regarding supported formats, in addition to 32-bit (single) and 64-bit (double) real formats, the 8087 also supports integers (16/32/64-bit) and a packed BCD format (typically used where controlled decimal representation is important).
Frequency and common variants
The 8087 was produced in multiple versions tied to the maximum system frequency (also depending on motherboard implementation): historically, variants at 5 MHz, 8 MHz, and 10 MHz are commonly encountered (with different part/stepping designations).
Why it mattered in systems of the time
It enabled floating-point performance far beyond software computation on 8086/8088.
It standardized the X87 model, later preserved in subsequent coprocessors (80287, 80387) and eventually integrated into more modern CPU designs.
It allowed a cost-based choice: you bought the 8087 only if the application workload justified it.
Sketch of the most important connections
┌──────────────────────────────┐ │ CPU 8086/8088 │ │ instruction fetch + control │ │ A/D bus + system signals │ └──────────────┬───────────────┘ │ shared bus + synchronization ▼ ┌──────────────────┐ │ INTEL 8087 │ │ X87 FPU │ │ stack ST0–ST7 │ │ 80-bit internal │ └─────────┬────────┘ │ memory accesses (operands/results) ▼ ┌────────────────────────────────┐ │ System RAM / ROM / I/O │ │ (operands, results, code) │ └────────────────────────────────┘
Table 1 – Identification data and specifications (English)
| Characteristic | Typical value |
|---|---|
| Device | Intel 8087 (math coprocessor) |
| Host CPUs | 8086, 8088 |
| Function | Acceleration of floating-point and mathematical functions |
| Register model | X87 stack: ST0–ST7 (8 registers) |
| Internal precision | 80-bit extended format |
| Supported formats | Real 32/64/80-bit, integers 16/32/64-bit, packed BCD |
| Typical frequencies | 5 / 8 / 10 MHz (variant and system dependent) |
| Typical package | 40-pin DIP (historical variants) |
Table 2 – Operational and software aspects (English)
| Aspect | Practical meaning |
|---|---|
| “ESC” opcodes | Mechanism by which X87 instructions are recognized by the coprocessor |
| WAIT/FWAIT synchronization | Used when software must ensure the 8087 has completed an operation before continuing |
| X87 stack | Requires disciplined push/pop management to avoid logical underflow/overflow |
| Performance benefit | Large for numeric workloads; minimal for integer-only software |
| Typical use | CAD, technical/scientific computing, spreadsheets, numeric processing |
| Optional component | Often installable in a dedicated socket; not required for general use |
| Evaluate |