ASM:《X86汇编语言-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载 (2)

       加载器访问硬盘,说白了就是在访问外围设备(Peripheral Equipment)。设备可以分两种,一种是输入设备,比如键盘,鼠标,麦克风,摄像头等;另一种是输出设备,比如显示器,打印机,扬声器等。输入设备和输出设备统称为输入输出设备(Input/Output,I/O)。

       处理器通过I/O接口与所有设备连接,处理器用了两个方法与外围设备打交道。

       第一个就是采用了总线技术(Bus),总线就是一排连接所有设备的线路,每个连接到这个线路上的器件都必须拥有电子开关。以至于他们随时都能够同这排电线连接,或者从这排电线上断开。

       第二个就是采用输入输出控制设备集中器(I/O Controller Hub,ICH)芯片,该芯片是连接不同的总线,并协调各个I/O接口对处理器的访问,在个人计算机上,这块芯片就是耳熟能详的南桥。

 

ASM:《X86汇编语言-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载

       如图,处理器通过局部总线连接到ICH内部的处理器接口电路,然后在ICH的内部,又通过总线与各个I/O相连。在ICH的内部,集成了一些常规的外围设备接口,如USB,PATA(IDE),SATA,老式的总线接口(LPC)、时钟等。每个设备都有自己的I/O接口电路同ICH相连。为了方便,主板上都有这些I/O接口的插槽,每个设备的I/O电路都设计成插卡式,可以方便插拔。

       ICH还对PCI(PCI Express)总线的支持,这条总线向外延伸,连接这主板上的若干个拓展槽,比如显卡就可以插在PCI上,然后把显示器接在显卡上。除了局部总线和PCI Express总线,每个I/O接口卡可能不止连接一个设备,这些线路涉及复用和仲裁问题,所以他们自己有一套独立的总线体系,称为通讯总线或者设备总线,比如USB总线和SATA总线。

       当处理器想访问某个设备的时候,ICH会接到通知,然后负责提供传输通道和其他辅助支持,并不允许其他设备和总线连接,反过来,某个设备想要连接处理器,也是一样的。

4. I/O接口访问和端口访问

       处理器是通过端口(Port)来和外围设备打交道的。本质上,端口就是一些寄存器,类似于处理器内部的寄存器,不同之处仅在于,这些寄存器位于I/O接口电路中。端口是处理器和外围设备通过I/O交流的窗口,每一个I/O接口可能拥有很多个端口,分别用于不同的目的。端口在不同的计算机系统有着不同的实现方式,在一些计算机系统中,端口号是映射到内存地址空间的,比如0x00000~0xE0000是真实的物理内存地址,而0xE0001~0xFFFFF是从很多I/O接口那里映射过来的,当访问这部分地址的时候,实际上是在访问I/O接口。

       而在另一些计算机系统中,端口是独立编制的,不和内存发生关系,在这种计算机中,处理器的地址线及连接内存,也连接着每一个I/O接口,但是,处理器还有一个特殊的引脚M/IO#,在这里,”#”表示低电平有效,也就是说,处理器访问内存的时候,他会让M/IO#引脚呈现高电平,这个时候与内存相关的电路就会被打开,相反,如果处理器访问I/O接口,那么M/IO#引脚呈现低电,内存电路会被禁止。与此同时,处理器发出的地址和M/IO#信号一起用来打开某个I/O接口(该I/O接口分配的端口号和处理器地址吻合的话)。

       Intel处理器,早期是独立编制的,现在既有内存映射的,也有独立编制的,书上是以独立编制为例子的。

       在独立编制的系统中,存在65536个端口(端口号从0~65535),因为是独立编制,所以不能使用mov指令访问端口,只能通过in和out指令来进行读和写。端口可以是8位或者16位的也可以是32位的。

       in指令是从端口读,他有两种形式:

 

ASM:《X86汇编语言-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载

out指令是对端口写,他也有两种形式和in指令是对称的

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyywz.html