打算机与外设是通过端口来交流信息的,外设的每个端口都必须有自己的地址,cpu才能找到这些端口,那么,这些端口的地址是如何得到的呢?
统一编址和独立编址最主要的差异就在于,在统一编址的时候,外设端口和内存单元完备一样,每个外设端口的地址占用一个内存单元的地址,两者不能重复,也不能区分;独立编址的时候,外设端口的地址和内存地址是分开来的,两者地址可以相同,但利用的读写命令不同。
由上图可以看出,图中的8255芯片地址是90H,91H,等等。由于8255一共四个端口,个中的A1A0用来确定详细哪个端口,而A7-A2我们则可以推出是100100,再假设A1A0就构成地址100100A1A0,也便是90H--93H。这便是端口编址的意思。
上图是8255的四个端口。
上图是8253与cpu的连接。这里8253的地址都是偶地址,由于cpu说的A0地址线一贯是低电平有效,而8253的四个端口地址则由CPU的A2A1确定,也便是8253上面的A1A0确定,但要把稳的是,终极的地址因此cpu的地址线为准的。
上图是8253构造图。
上面的例子都是独立编址的,由于cpu访问这些端口的指令都是IN和OUT,而不是MOVE。
对付ARM架构的处理器,都是IO与内存统一编址:
(1)类似于访问内存的办法,即把外设的寄存器当作一个内存地址来读写,从而以访问内存相同的办法来操作外设,叫IO与内存统一编址办法
(2)例如ARM架构下,我们写的代码要适应ARM架构的IO与内存统一编址的情形,所有我们访问IO的时候,也便是读写寄存器,读写硬件便是在进行IO,IO和内存一样也有个地址(内核统一编址机制已经做好代码定义),被统一化了。
也便是说。如果是统一编址,就无法在指令上去区分是内存单元还是外设端口。
无论统一还是独立编址,外设端口的地址都来源于cpu的地址线。