16-bit computing
In computer architecture, 16-bit integers, memory addresses, or other data units are those that are 16 bits (2 octets) wide. Also, 16-bit CPU and ALU architectures are those that are based on registers, address buses, or data buses of that size. 16-bit microcomputers are computers in which 16-bit microprocessors were the norm.
Computer architecture bit widths |
---|
Bit |
Application |
Binary floating-point precision |
|
Decimal floating-point precision |
|
A 16-bit register can store 216 different values. The signed range of integer values that can be stored in 16 bits is −32,768 (−1 × 215) through 32,767 (215 − 1); the unsigned range is 0 through 65,535 (216 − 1). Since 216 is 65,536, a processor with 16-bit memory addresses can directly access 64 KB (65,536 bytes) of byte-addressable memory. If a system uses segmentation with 16-bit segment offsets, more can be accessed.
16-bit architecture
The MIT Whirlwind (c. 1951)[1][2] was quite possibly the first-ever 16-bit computer. Other early 16-bit computers (c. 1965–70) include the IBM 1130,[3] the HP 2100,[4] the Data General Nova,[5] and the DEC PDP-11.[6] Early multi-chip 16-bit microprocessors (c. 1973–76) include the five-chip National Semiconductor IMP-16 (1973),[7] the two-chip NEC μCOM-16 (1974),[8][7] the three-chip Western Digital MCP-1600 (1975), and the five-chip Toshiba T-3412 (1976).[7] Early single-chip 16-bit microprocessors (c. 1975–76) include the Panafacom MN1610 (1975),[9][10][7] National Semiconductor PACE (1975), General Instrument CP1600 (1975), Texas Instruments TMS9900 (1976),[7] and the HP BPC. Other notable 16-bit processors include the Intel 8086, the Intel 80286, the WDC 65C816, and the Zilog Z8000. The Intel 8088 was binary compatible with the Intel 8086, and was 16-bit in that its registers were 16 bits wide, and arithmetic instructions could operate on 16-bit quantities, even though its external bus was 8 bits wide.
A 16-bit integer can store 216 (or 65,536) distinct values. In an unsigned representation, these values are the integers between 0 and 65,535; using two's complement, possible values range from −32,768 to 32,767. Hence, a processor with 16-bit memory addresses can directly access 64 KB of byte-addressable memory.
16-bit processors have been almost entirely supplanted in the personal computer industry, and are used less than 32-bit (or 8-bit) CPUs in embedded applications.
16/32-bit Motorola 68000 and Intel 386SX
The Motorola 68000 is sometimes called 16-bit because its internal and external data buses were 16 bits wide; however, it could be considered a 32-bit processor in that the general purpose registers were 32 bits wide and most arithmetic instructions supported 32-bit arithmetic. The 68000 was a microcoded processor with three internal 16-bit ALUs. Only 24 bits of the program counter (PC) were available on original DIP packages, with up to 16 megabytes of addressable RAM. 68000 software is 32-bit in nature and forward-compatible with other 32-bit processors in the same family.[11] The 68008 was a version of the 68000 with an 8-bit external data path and 1-megabyte addressing for the 48-pin DIP version, and 4 megabytes for the 52-pin PLCC version. Several Apple Macintosh models--e.g., the LC series--used 32-bit 68020 and 68030 processors on a 16-bit data bus to save cost.
Similar analysis applies to Intel's 80286 CPU replacement, called the 386SX, which is a 32-bit processor with 32-bit ALU and internal 32-bit data paths with a 16-bit external bus and 24-bit addressing of the processor it replaced.
Intel 16-bit memory models
Just as there are multiple data models for 64-bit architectures, the 16-bit Intel architecture allows for different memory models—ways to access a particular memory location. The reason for using a specific memory model is the size of the assembler instructions or required storage for pointers. Compilers of the 16-bit era generally had the following type-width characteristic:
Data model | short |
int |
long |
Pointers |
---|---|---|---|---|
IP16L32 (near) | 16 | 16 | 32 | 16 |
I16LP32 (far) | 16 | 16 | 32 | 32 |
- Tiny
- Code and data will be in the same segment (especially, the registers CS, DS, ES, SS will point to the same segment); near (16-bit) pointers are always used. Code, data and stack together cannot exceed 64 KB.
- Small
- Code and data will be in different segments, and near pointers are always used. There will be 64 KB of space for code and 64 KB for data/stack.
- Medium
- Code pointers will use far pointers (16:16 bit), enabling access to 1 MB. Data pointers remain of the near type.
- Compact
- Data pointers will use far and code will use near pointers.
- Large/huge
- Code and data pointers will be far.[12]
16-bit application
In the context of IBM PC compatible and Wintel platforms, a 16-bit application is any software written for MS-DOS, OS/2 1.x or early versions of Microsoft Windows which originally ran on the 16-bit Intel 8088 and Intel 80286 microprocessors. Such applications used a 20-bit or 24-bit segment or selector-offset address representation to extend the range of addressable memory locations beyond what was possible using only 16-bit addresses. Programs containing more than 216 bytes (65,536 bytes) of instructions and data therefore required special instructions to switch between their 64-kilobyte segments, increasing the complexity of programming 16-bit applications.
List of 16-bit CPUs
- Angstrem
- 1801 series CPU
- Data General
- Nova
- Eclipse
- Digital Equipment Corporation
- PDP-11 (for LSI-11, see Western Digital, below)
- DEC J-11
- DEC T-11
- PDP-11 (for LSI-11, see Western Digital, below)
- EnSilica
- eSi-1600
- Ferranti
- Ferranti F100-L
- Ferranti F200-L
- Freescale
- Freescale 68HC12
- Freescale 68HC16
- General Instrument
- CP1600
- Hewlett-Packard
- HP 21xx/2000/1000/98xx/BPC
- HP 3000
- Honeywell
- Honeywell Level 6/DPS 6
- IBM
- 1130/1800
- System/7
- Series/1
- System/36
- Infineon
- XE166 family
- C166 family
- C167 family
- XC2000
- Intel
- Intel 8086/Intel 8088
- Intel 80186/Intel 80188
- Intel 80286
- Intel MCS-96
- Lockheed
- MAC-16
- MIL-STD-1750A
- Motorola
- Motorola 68000 (32-bit registers, 16-bit bus)
- Motorola 68010 (32-bit registers, 16-bit bus)
- National Semiconductor
- IMP-16
- PACE/INS8900
- NEC
- μCOM-16
- NEC V20
- NEC V30
- Panafacom
- MN1610
- Renesas
- Renesas M16C (16-bit registers, 24-bit address space)
- Ricoh
- Ricoh 5A22 (WDC 65816 clone used in SNES)
- Texas Instruments
- Texas Instruments TMS9900
- TI MSP430
- Toshiba
- T-3412
- Western Design Center
- WDC 65816/65802
- Western Digital
- MCP-1600 (used in the DEC LSI-11)
- Xerox
- Alto
- Zilog
- Zilog Z8000
See also
- Microprocessor: 16-bit designs
- Influence of the IBM PC on the personal computer market: Before the IBM PC's introduction
- 74181 (key component of some early 16-bit and other CPUs)
- Audio bit depth – as 16-bit is the most common bit depth used, e.g. on CD audio.
References
- "Year 1951". Computer History Museum. (see also "Year 1943".).
- Digital Press, Digital at Work, Pearson, 1992, ISBN 1-55558-092-0, pp. 4, 23.
- "The IBM 1130 computing system". IBM Archives.
- "HP 2116". Computer History Museum.
- "Data General Nova minicomputer". Computer History Museum.
- Pearson, Jamie Parker (September 1992). Digital at work: snapshots from the first thirty-five years. Digital Press. pp. 58–61. ISBN 978-1-55558-092-6.
- Belzer, Jack; Holzman, Albert G.; Kent, Allen (1978). Encyclopedia of Computer Science and Technology. Volume 10 - Linear and Matrix Algebra to Microorganisms: Computer-Assisted Identification. CRC Press. p. 402. ISBN 9780824722609.
- "1970s: Development and evolution of microprocessors" (PDF). Semiconductor History Museum of Japan.
- "16-bit Microprocessors". CPU Museum. Retrieved 5 October 2010.
- "History". PFU. Retrieved 5 October 2010.
- Motorola M68000 Family, Programmer's Reference Manual (PDF). Motorola, Inc. 1992. sec. 2.4, pp. 2–21.
- Borland Turbo C++ 1.01 in-program manual