2.I/O端口和存储器单独编址
这种编址方式的基本思想是,将I/O端口地址和存储器地址分开单独编址,各自形成
完整的地址空间(两者的地址编号可以重叠)。指令系统中分别设立面向存储器操作的指令和面向I/O操作的指令(N指令和OUT指令),CPU使用专门的I/O指令来访问I/O端口。
由于在采用公共总线的微型计算机结构中,数据总线的信息、控制总线的相关控制信号(主要是读写控制)以及地址总线的地址,均为存储器和I/O端口所共享,所以在这种编址方式下,存在着信息究竟给谁的问题,是给存储器的,还是给I/O端口的。对此,一般通过在CPU芯片上设置专门的控制信号线来解决。典型的方法是在8086CPU的控制总线中专设一称之为M/IO的控制线给以标志,用该控制线的高电平表示存储器操作,低电平表示I/O操作。通常,CPU使用地址总线的低位对I/O端口寻址。例如,使用地址总线的低8位,可提供28=256个I/0端口的地址范围:若使用地址总线的低16位,则可提供26=65536(64K)个I/O端口地址。
这种编址方式的优点是:第一,I/O端口不占用存储器地址,故不会减少用户的存储器地址空间:第二,单独I/O指令的地址码较短,地址译码方便,I/O指令短,执行速度快;第三,由于采用单独的I/O指令,所以在编制程序和阅读程序时容易与访问存储器型指令加以区别,使程序中I/O操作和其他操作层次清晰,便于理解。
这种编址方式的缺点是:第一,单独I/O指令的功能有限,只能对端口数据进行输入/输出操作,不能直接进行移位、比较等其他操作;第二,由于采用了专用的I/O操作时序及I/O控制信号线,因而增加了微处理器本身控制逻辑的复杂性。
微处理机Z80系列、8086系列均采用了这种编址方式。