在不同的系统中,I/O端口的地址编排有两种形式:
存储器统一编址和I/O独立编址。
存储器统一编址(存储器映像编址):
在这种编址方式中,I/O端口和内存单元统一编址,
即把I/O端口当作内存单元对待,
从整个内存空间中划出一个子空间给I/O端口,
每一个I/O端口分配一个地址码,
用访问存储器的指令对I/O端口进行操作。
存储器统一编址的优点是:
I/O端口的数目几乎不受限制;
访问内存指令均适用于I/O端口,对I/O端口的数据处理能力强;
cpu无需产生区别访问内存操作和I/O操作的控制信号,从而可减少引脚。
存储器统一编址缺点是:
程序中I/O操作不清晰,难以区分程序中的I/O操作和存储器操作;
I/O端口占用了一部分内存空间;
I/O端口地址译码电路较复杂(因为内存的地址位数较多)。
I/O独立编址:
I/O端口编址和存储器的编址相互独立,
即I/O端口地址空间和存储器地址空间分开设置,互不影响。
采用这种编址方式,对I/O端口的操作使用输入/输出指令(I/O指令)。
I/O独立编址的优点是:
不占用内存空间;
使用I/O指令,程序清晰,很容易看出是I/O操作还是存储器操作;
译码电路比较简单(因为I/0端口的地址空间一般较小,所用地址线也就较少)。
I/O独立编址缺点是:只能用专门的I/O指令,访问端口的方法不如访问存储器的方法多。
编址总概:
上面两种编址方式各有优点和缺点,
究竟采用哪一种取决于系统的总体设计。
在一个系统中也可以同时使用两种方式,
前提是首先要支持I/O独立编址。
如:Intel的x86微处理器支持I/O独立编址,
因为它们的指令系统中都有I/O指令,
并设置了可以区分I/O访问和存储器访问的控制信号引脚。
而一些微处理器或单片机,为了减少引脚,从而减少芯片占用面积,
不支持I/O独立编址,只能采用存储器统一编址。