The method used to pass signals from the CPU to the controller boards of peripheral devices on x86 machines. An I/O address, also called a "port address," references a separate memory space on PC peripheral boards, similar to memory-mapped peripherals that use blocks of memory. Peripherals often use both methods: an I/O address for passing control signals and memory for transferring data.
Tiny Scattered Memory Banks
There is a 64K address space for I/O addresses, although typically less than 1K is used. Each board that uses an I/O address contains a few bytes of memory (16, 32, etc.) set to a default address range. One or more alternate addresses is also provided to resolve conflicts with other boards. These I/O spaces are tiny memory banks scattered over different devices. As long as each one is set to a different address, the CPU can transmit signals to the appropriate boards without conflict.
The I/O Address Operation
If a program needs to send a byte to the serial port, it issues an OUT instruction to the CPU with the address of that serial port. The CPU notifies the address bus to activate the I/O space, not regular memory, and the address bus signals the appropriate byte location on the board. The CPU then sends the data character over the data bus to that memory location. Following are the default I/O addresses for the serial and parallel ports in a PC. See
Plug and Play.
Port PC PS/2
COM1 3F8h
COM2 2F8h
COM3 2E8h
COM4 2E0h
LPT1 378h 3BCh
LPT2 278h 378h
LPT3 3BCh 278h
I/O Addresses
Windows provides ways to view the details of I/O addresses and other internal settings. This is a Windows 98 screen obtained from the Settings control panel. See
Win Technical details.