cpu是怎样访问到IO接口呢?肯定得有个链路

既然说到了IO接口,不知道大家有没有什么问题,cpu是怎么访问IO接口的呢?应该有链接吧?什么?隐约听到同学开玩笑说CPU使用无线访问其他设备。哈哈,不知道大家有没有听说过,无线终端是有线的。不管无线设备有多强大,在网络的末端,都必须有物理设备的支持。因此,最好使用物理链路。看主板上密密麻麻的线条就知道为什么有人把主板叫做电路板了。实际上,这个物理链路是一组电线。这条线是用来传输信号的,所以叫信号线。想要与其他硬件通信的设备必须找到连接到这条线路的方法。由于这条线是公用线路,供大家使用,是所有设备共享的,所以在图中称为总线。这就是大家所说的公共汽车。简而言之,公共汽车不是抽象的东西,它是一条将每个人连接在一起的电线。说得更形象一些,公共汽车就像高速公路。这条高速公路上有许多出口供汽车进出。汽车相当于电脑中的各种硬件设备。您可以选择连接到总线,也可以选择与总线分开。汽车相当于电脑中的各种硬件设备。您可以选择连接到总线,也可以选择与总线分开。汽车相当于电脑中的各种硬件设备。您可以选择连接到总线,也可以选择与总线分开。

同时cpu只能和一个IO接口通信。当多个IO接口要同时与cpu对话时,面对众多接口的倾慕,cpu会选择与谁单独对话呢?这项工作不应该由 cpu 完成。前面说了,cpu太忙了,不如做个好钢厂。既然分层可以解决问题,那我们再加一层。这一层的职责是仲裁IO。接口竞争,还要连接各种内部总线。因为它的使命,它的名字叫做输入输出控制中心ICH(I/O control hub),也就是南桥芯片。如图所示

说到南桥,就不得不提北桥芯片的作用。图中北桥上标注的部分其实就是散热片,北桥在它下面。由于南桥和北桥一般都是成对出现的,至少在支持intel cpu的主板上是这样的(也就是说,为了降低cpu和北桥之间交换数据的成本,AMD把cpu里面有北桥,所以支持AMD板子上可能没有北桥芯片)。南桥用于连接pci、pci-express、AGP等低速设备,北桥用于连接内存等高速设备。

好了,就这样,我们还要继续说南桥。cpu通过内部总线连接到南桥芯片内部,这个内部总线是专用的,它只通向位于南桥的cpu接口。这太酷了,但它实际上只是一根电线。从名字就可以看出,South Bridge这个词中的bridge其实对应着hub这个词,而且都是“public、collection”的意思,所以不难想象一些IO接口,比如并口,是融入南桥。硬盘PATA(也就是我们通常所说的IDE硬盘)、串口硬盘SATA、USB、PCI设备、电源管理等接口。由于这些接口对于微型计算机来说是必不可少的,因此它们直接植根于南桥内部。

南桥内部的接口是微机不可缺少的。除了这些,还有其他可用的设备。南桥不应该被忽略吗?它必须被管理,毕竟这是它的工作。南桥芯片内部总线示意图如图:

为了支持这些不必要的设备(当然主要是为了方便扩展,不好扩展的产品从诞生之日起就等于死),南桥提供了一个专用于扩展的接口,即PCI接口。主板上有很多插槽,都是预留的pci接口,pci设备可以即插即用。由于它们延伸到南桥之外,就像高速公路一样,可以连接很多pci设备,所以这个扩展的PCI接口就变成了PCI总线。结合图 3-11 和 3-12。当您在主板上看到这些并排的插座时,您不得不认为它们实际上是“骑在”电线上。更容易理解巴士吗?

如果你看到一辆接一辆的公交车,如果你感到不安,那就说明公交车这个词的意思不明确,也许最直接的翻译就是“公共线路”。简单的事情通过术语是如此深奥,以至于它们完全无知。其实想一想,这么多设备需要相互通信,不应该是用电线连接的吗?只是在大多数情况下,这根线连接的设备不止两个,而且总数比较多,所以才叫“总线”线。由于用途不同,这些线有不同的名称io口输入输出实验报告,如地址总线、数据总线、ISA总线等。总之,不要被总线这个词吓倒,它实际上是一根电线。

以上就是接口的所有硬件部分。我们最终希望通过软件来使用这些硬件。让我们看看我们必须做些什么来驱动这些硬件。

在它诞生之初,IO接口被设计成通过寄存器与cpu通信。内部有专门用于数据交互的寄存器,但是这里提到的这些寄存器都位于IO接口中,是为了和内部cpu区分开来。寄存器,IO接口中的寄存器称为端口(这不是网络应用打开的那种端口,比如网络服务器会启动80端口,那是另外一回事)。

IO接口是连接cpu和硬件的桥梁,一端是cpu,另一端是硬件。端口是IO接口向CPU开放的接口。一般IO接口有一组端口,每个端口都有自己的用途。有时,一个端口在不同的情况下有不同的用途。可以看出,IO接口另一端的硬件是比较复杂的。因此,当您对一个 IO 接口上引入这么多端口感到不安时io口输入输出实验报告,请停止抱怨。IO接口为我们大大简化了操作。

端口也是寄存器,寄存器有数据宽度,8位,16、32位,每个设备不一样,要看厂家自己安排。

如何访问端口访问这些端口。还有一些微机系统是独立寻址端口的,所有端口从0开始编号,一个IO接口上的所有端口号都是连续的。后面我们讲解硬盘的时候会看到。

在IA32系统中,由于用于存放端口号的寄存器为16位,所以最多有65536个端口,即0~65535。

如果内存映射,则可以使用 mov 指令操作端口。但是因为它使用独立寻址,所以不能作为内存来操作,因为有些CPU提供了特殊的指令来做这个,进出。

Intel 汇编语言的形式是:操作码目标操作数,源操作数。Intel之所以采用这种格式,可能是因为“目的操作数”=“源操作数”的表达更加形象,比如a=6。

in命令用于从端口读取数据,其一般形式为:

1.in al, dx 2.in ax, dx

其中,al和ax用于存放从端口获取的数据,dx是指端口号。

这是一个固定的用法。只要使用in指令,源操作数(端口号)一定是dx,目的操作数是al还是ax取决于dx端口所引用的寄存器是8位宽还是16位宽.

out命令用于向端口写入数据,其一般形式为:

输出 dx, al 输出 dx,axout 立即, alout 立即,ax

注意,这与 in 指令相反,in 指令的源操作数是端口号,out 指令的目标操作数是端口号。

如果上面看起来有点乱,我总结一下 in 和 out 命令的共同点:

上面两条指令中,dx只用于端口号,不管是源操作数还是目的操作数。in指令从端口读取数据,该端口可视为数据源,因此端口出现在“源操作数”位置。读取的数据必须有一个“目标”来存储,所以in指令中存放数据的地方出现在“目标操作数”的位置。out 指令将数据写入端口指向的寄存器。在这种情况下,端口是数据的“目标”,因此端口出现在目标操作数的位置。要写入的数据应该总是有一个“源”,所以out指令中的“源操作数”就是数据源。在上述两条指令中,端口号和数据的位置取决于它们各自作为源操作数或目标操作数的角色。在上述两条指令的两个操作数中,要么为源操作数,要么为目标操作数。除端口号外,用作数据的操作数(in指令中为数据目的,out指令中为数据源),始终使用al寄存器存储8位数据,使用ax寄存器存储16 位数据。, 至于是用al还是ax来存储数据,就看端口所指向的寄存器的宽度了。必须与端口寄存器的位宽一致,不能丢失数据精度。在 in 指令中,端口号只能使用 dx 寄存器。在 out 指令中,可以使用 dx 寄存器或立即数作为端口号。

真心希望看完以后不要再乱七八糟了^_^。

嗯,有了这些硬件相关的知识,以后我们就可以操作其他硬件了。我们不需要学得越来越多,就够了。还是那句话,以后学什么地方用也不迟,大家辛苦了。

【继续】

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论