外设都是通过读写设备上的寄存器来进行访问的,外设寄存器也成为“”I/O端口“”,而IO端口有两种编址方式:独立编址和统一编址。
1)统一编址:寄存器参与内存统一编址。外设接口中的IO寄存器(即IO端口)与主存(内存)单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划分出来用作IO的地址空间。(理解:把外设的寄存器当做是一个内存地址,从而以类似访问内存相同的方式来操作。)
统一编址优点是指令类型多、功能齐全,不仅使访问I/O端口可实现输入/输出操作而且可对端口进行算数逻辑运算、移位等;另外能给端口较大的编址空间。缺点是端口占用了存储器的地址空间,使存储器容量减小,另外指令长度比专门I/O指令长,因而执行速度较慢。
2)独立编址:将外设的寄存器看成一个独立的地址空间。IO地址与存储地(内存)址分开独立编址,I/O端口地址不占用存储空间的地址范围。这样,在系统中就存在了另一种与存储地址无关的IO地址。此时,需要使用专用的CPU指令来访问某种特定外设。
独立编址方式的优点是I/O端口地址不占用存储空间;使用专门的I/O指令对端口进行操作,I/O指令短执行速度快;并且由于专门I/O指令与存储器访问指令有明显的区别,使程序中I/O操作合存储器操作层次清晰,程序的可读性强。
缺点是指令少,只有输入与输出功能。是从存储器空间划出一部分地址空间给I/O设备,把I/O接口中的端口当作存储器单元一样进行访问,不设置专门的I/O指令,有一部分对存储器使用的指令也可用于端口。