Port-mapped I/O refers to mapping registers and memory of peripheral devices into a different address space than main memory. This comes in contrast with Memory-mapped I/O, which refers to mapping registers and memory of peripheral devices into the same address space as main memory.
- Possibly less tight in small address spaces - In 8-bit and 16-bit address spaces, memory-mapped peripherals can take up a significant part of them, leaving less space for main memory. Having two separate address spaces (partially) solves this problem.
- More instructions needed to be implemented by the CPU - For RISC architectures, the LOAD and STORE instructions can't be used to access both main memory and peripherals, unless there are modifiers that specify the address space. For CISC architectures, there is a need for additional IN and OUT instructions, or for additional modifiers for instructions that access memory.
- Worse abstraction over types of memory - The CPU treats main memory and peripherals separately. For a simple example, it can't easily start executing directly from ROM as the ROM image needs to be loaded into RAM first, unless there is a mechanism for instructions to be fetched either from main memory address space or from the peripheral address space.