CPU通过地址识别端口,端口地址也称为端口号。为I/O端口分配地址称为编址。I/O端口的编址方式有两种:
- 与存储器统一编址
- 独立编址方式
统一编址
这种方式又称为存储器映射编址方式。它将I/O端口作为内存单元对待,由CPU统一分配地址。通 常在CPU的地址空间中划出一部分作为输入输出系统的端口地址范围,不再作为内存地址使用。
- 优点:访问I/O端口和访问内存单元一样,所有访问内存的指令都可以访问I/O端口,不用设置专门 的I/O指令;也不需要专用的I/O端口控制信号,简化了系统总线。
- 利用数据传送指令就可以实现 CPU 与 I/O 端口的数据交换;
- 用测试指令可以测试端口的状态位,了解外设的状态,判断输入输出操作的执行情况。
- 缺点:占用一部分CPU地址空间。划出的端口地址范围,不能再作为内存地址使用 ,所以减少了内存地址空间。
独立编址
- CPU给I/O端口分配一个独立的地址空间,提供专用的控制信号。I/O端口地址空间与内存地址空间隔离。
- 优点:不占用内存空间,而且I/O端口地址线根数少,译码电路简单。
- 缺点:需要专用的控制信号和专用的I/O指令。
8086系统中,输入输出端口采用独立编址方式,内存空间00000H ~FFFFFH(1MB),使用A0 ~A19 全部20根地址线寻址。I/O地址空间0000H ~FFFFH(64KB),使用A0 ~A15共16根地址线寻址
I/O地址空间中0000~ 03FFH区间通常留给系统设备和ISA总线的端口使用。其中0000~ 00FFH区 间的端口地址,用于访问系统板上的设备,如时钟、定时器、键盘接口、中断控制器和DMA控制器等。这个区间的地址信号中A8~ A15都为0,所以为了使用方便,这个区间的端口地址在IN、OUT 指令中以8位地址的形式出现,只体现了A0~A7的内容。
0100~ 03FFH区间用于磁盘控制器、显示器、串行口和并行口等接口。
0400H~FFFFH地址区间用于用户应用、主板功能和PCI总线。
0000~03FFH区间端口地址分配 I/O指令形式
这里需要注意,可以直接用八位地址表示的只有0000~ 00FFH区间的端口,在这之外的端口需要用到16位地址表示,但这时不能直接表示,需要将其存到DX寄存器,然后借助DX进行IN或OUT