1.I/O接口的访问方式
CPU对I/O接口的访问实际上就是对接口中数据寄存器、状态寄存器和控制寄存器的访问。从含义上讲,数据信息、状态信息和控制信息应该分别传送和处理;但在微型计算机系统中,从广义上讲,状态信息属于输入数据,控制信息属于输出数据,因此CPU与I/O接口之间各类信息的交换都是通过数据总线来进行的。在这种情况下,只有利用地址信号来区分各类信息,即根据CPU送出的不同地址将数据线上出现的数据与I/O接口内部的寄存器对应起来。换句话说,系统将给I/O接口中的寄存器分配地址,CPU可以通过不同的地址访问不同的寄存器,从而完成对接口的访问。为了方便,将I/O接口内的寄存器称为端口(PORT),其地址称为端口地址,并与存储单元地址相区别。
(1)接口部件的端口
CPU和外设进行数据相互传输时,各类信息通过不同的寄存器控制输入/输出,一般称这些寄存器为I/O端口,每个端口有一个端口地址。用于对来自CPU和内存的数据或者送往CPU和内存的数据起缓存作用,这些端口叫数据端口;用来存放外部设备或者接口部件本身的状态,这类端口称为状态端口;用来存放CPU发出的命令,以便控制接口和设备的动作,这类端口叫控制端口。接口部件的I/O端口如图6-1所示。
注意:无论是输入还是输出,所用到的地址总是对端口而言的,不是对接口部件而言的。为了节省地址空间,将数据输入端口和数据输出端口对应同一个端口地址;同样,状态端口和控制端口也常用同一个端口地址。CPU对外设的I/O接口操作就归结为对接口芯片各端口的读/写操作。
(2)I/O接口与系统的连接
接口电路位于CPU与外设之间,从结构上看,可以把一个接口分为两个部分,一是用来和I/O设备相连;二是用来和系统总线相连。
2.I/O端口的编址方式
在微型计算机系统中,端口的编址通常有两种不同的方式,即存储器映像编址和I/O端口独立编址。
(1)存储器映像编址
存储器映像(Memory Mapped)编址又称为统一编址,指I/O端口与存储器共享一个寻址空间,也称为存储器对应输入/输出方式,每一个外设端口占有存储器的一个地址。在这种系统中,CPU可以用同样的指令对I/O端口和存储器的单元进行访问,这给使用者提供了极大的方便,像MOTOROLA公司生产的MC6800/68000系列就采用了这种寻址方式,其寻址的连接方式如图6-2所示。在图中,由于I/O口地址是整个存储器地址空间的一部分,故可用存储器读/写信号来控制其读/写,而不需要专门的控制信号。至于到底访问哪个空间可通过地址译码来实现。对64KB存储器存储空间来说,利用这种寻址方式时可将该存储空间分为高半地址与低半地址两部分,其中高地址为I/O端口地址,低地址为存储器地址。具体可利用A15的状态来区分两种地址,即当A15=0时,A14~A0用于指定存储单元;当A15=1时,A14~A0用于指定I/O端口。
图6-2 存储器映像的I/O端口寻址连接方式
存储器映像寻址的主要优点是,端口寻址手段丰富,对其数据进行操作可与对存储器操作一样灵活,且不需要专门的I/O指令,这有利于I/O程序的设计。此外,这种I/O寻址方式还有两个优点:一是I/O寄存器数目与外设数目不受限制,而只受总存储容量的限制;二是读/写控制逻辑比较简单。主要缺点是I/O端口要占用存储器的一部分地址空间,使可用的内存空间减少,同时,程序的可读性下降。
(2)I/O端口独立编址
I/O端口独立编址是指主存地址空间和I/O端口地址空间相互独立,分别编址,其也称为端口寻址的输入/输出方式。CPU有专门的输入/输出指令(IN/OUT),通过这些指令中的地址来区分不同的外设。为了区分当前到底是寻址I/O端口,还是寻址主存单元,CPU必须设置专门的I/O指令,指令译码后,CPU将对外提供不同的控制信号以表明当前的访问对象。显然,这种系统中主存和I/O端口的地址可用范围都比较大。(www.xing528.com)
由于系统需要的I/O端口寄存器通常要比存储器单元少得多,所以设置256~1024个端口对于一般微型计算机系统已经足够了,故对I/O端口的选择只需用到8~10根地址线。图6-3为I/O端口单独寻址方式示意图,图中对I/O端口的选择用到了8根地址线。与存储器映像寻址相比,处理器对I/O端口和存储单元的不同寻址是通过不同的读/写控制信号、、、来实现的。
像8086/8088等就采用了I/O端口单独寻址方式。这些指令包含直接寻址和寄存器间接寻址两种类型。对以8086为CPU的系列PC而言,若采用直接寻址,则其指令格式如下:
输入指令:I N A L,PORT
输出指令:OUT PORT,AL
这种直接寻址方式的端口地址为一个字节长,可寻址256个端口。
若采用间接寻址,则其指令格式如下:
输入指令:IN AL,DX
输出指令:OUT DX,AL
这种间接寻址方式的端口地址为两个字节长,由DX寄存器间接给出,可寻址64KB个端口地址。
对上述I/O指令,累加器AL一次传送一个字节数,若使用AX则一次传送两个字节。指令中指定端口及其下一个端口的内容,分别与AL和AH寄存器的内容相对应。
图6-3 I/O端口单独寻址方式示意图
这种寻址方式的优点是,I/O口的地址空间独立,且不占用存储器地址空间;地址线较少,且寻址速度相对较快;专门I/O指令的使用,使编制的程序清晰,便于理解和检查。缺点是,I/O指令较少,访问端口的手段远不如访问存储器的手段丰富,导致程序设计的灵活性较差;I/O指令的功能一般比较弱,在I/O操作中必须借助CPU的寄存器进行中转;可寻址的范围较小,还必须有相应的控制线()来区分是寻址存储器还是外设,需要存储器和I/O端口两套控制逻辑,增加了控制逻辑的复杂性。
在提出端口的概念后,就可以将CPU对外设的操作映射成对端口的操作了。至于端口地址的译码技术与存储器单元地址的译码技术类似,只要将端口看做存储单元,并将存储器读/写信号换为I/O读/写信号就可以了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。