IA-32 (short for "Intel Architecture, 32-bit", commonly calledi386[1][2])[3] is the32-bit version of thex86instruction set architecture, designed byIntel and first implemented in the80386microprocessor in 1985. IA-32 is the first incarnation of x86 that supports 32-bit computing;[4] as a result, the "IA-32" term may be used as ametonym to refer to all x86 versions that support 32-bit computing.[5][6]
Within variousprogramming language directives, IA-32 is still sometimes referred to as the "i386" architecture. In some other contexts, certain iterations of the IA-32 ISA are sometimes labelledi486,i586 andi686, referring to the instructionsupersets offered by the80486, theP5 and theP6 microarchitectures respectively. These updates offered numerous additions alongside the base IA-32 set includingfloating-point capabilities and theMMX extensions.
Intel was historically the largest manufacturer of IA-32 processors, with the second biggest supplier having beenAMD. During the 1990s,VIA,Transmeta and other chip manufacturers also produced IA-32 compatible processors (e.g.WinChip). In the modern era, Intel still produced IA-32 processors under theIntel Quarkmicrocontroller platform until 2019; however, since the 2000s, the majority of manufacturers (Intel included) moved almost exclusively to implementing CPUs based on the 64-bit variant of x86,x86-64. x86-64, by specification, offers legacy operating modes that operate on the IA-32 ISA for backwards compatibility. Even given the contemporary prevalence of x86-64, as of today, IA-32 protected mode versions of many modern operating systems are still maintained, e.g.Microsoft Windows (up toWindows 10),[7]Windows Server (up toWindows Server 2008)[8] and theDebianLinux distribution.[9] In spite of IA-32's name (and causing some potential confusion), the 64-bit evolution of x86 that originated out of AMD would not be known as "IA-64", that name instead belonging to Intel's discontinuedItanium architecture.
The primary defining characteristic of IA-32 is the availability of 32-bit general-purposeprocessor registers (for example, EAX and EBX), 32-bitinteger arithmetic and logical operations, 32-bit offsets within a segment inprotected mode, and the translation of segmented addresses to 32-bit linear addresses. The designers took the opportunity to make other improvements as well. Some of the most significant changes (relative to the 16-bit286 instruction set) are:
| Operating mode | Operating system required | Type of code being run | Default address size | Default operand size | TypicalGPR width |
|---|---|---|---|---|---|
| Protected mode | 32-bit operating system or boot loader | 32-bit protected-mode code | 32 bits | 32 bits | 32 bits |
| 16-bit protected-mode operating system or boot loader, or 32-bit boot loader | 16-bit protected-mode code | 16 bits | 16 bits | 16 or 32 bits | |
| Virtual 8086 mode | 16- or 32-bit protected-mode operating system | 16-bit real-mode code | 16 bits | 16 bits | 16 or 32 bits |
| Real mode | 16-bit real-mode operating system or boot loader, or 32-bit boot loader | 16-bit real-mode code | 16 bits | 16 bits | 16 or 32 bits |
| Unreal mode | 16-bit real-mode operating system or boot loader, or 32-bit boot loader | 16-bit real-mode code | 32 bits | 16 bits | 16 or 32 bits |
Thin Universal binaries to the specified architecture [...] should be specified as "i386", "x86_64", etc.
The Intel386 processor was the first 32-bit processor in the IA-32 architecture family. It introduced 32-bit registers for use both to hold operands and for addressing.