“Port IO”的版本间差异
(创建页面,内容为“x86体系结构将地址空间分为两个编程上不同的两组: 内存(memory)和端口(ports)。 在早古时代上,内存被用作数据存储,读写操作不会产生副作用,而端口被用来控制外部硬件,这些硬件需要不同的计时方式来工作。 这也是访问端口比访问内存慢得多的原因。 而许多其他常见的计算机体系结构具有统一的空间,其中设备以与内存相同的速度运行,…”) |
小 |
||
第4行: | 第4行: | ||
==如何访问端口== | ==如何访问端口== | ||
x86包含四个从端口空间读取的汇编操作码(opcodes,译者注:CPU指令): IN、INS*、OUT和OUTS* 都有8位和16位版本,386及更高版本也有32位版本。 | |||
== 某个设备含有哪些端口 == | == 某个设备含有哪些端口 == |
2022年3月12日 (六) 06:21的版本
x86体系结构将地址空间分为两个编程上不同的两组: 内存(memory)和端口(ports)。 在早古时代上,内存被用作数据存储,读写操作不会产生副作用,而端口被用来控制外部硬件,这些硬件需要不同的计时方式来工作。 这也是访问端口比访问内存慢得多的原因。 而许多其他常见的计算机体系结构具有统一的空间,其中设备以与内存相同的速度运行,或者地址空间被划分为具有单独可配置属性的块。
现代x86硬件越来越倾向于统一空间,但出于遗留原因,仍然包含端口。
如何访问端口
x86包含四个从端口空间读取的汇编操作码(opcodes,译者注:CPU指令): IN、INS*、OUT和OUTS* 都有8位和16位版本,386及更高版本也有32位版本。
某个设备含有哪些端口
有三组设备,每组都需要不同的方法查明端口分配情况。 第一组包括所有PC-AT硬件、设备,如[[PIT|PIT-定时器]、[[PIC|PIC-中断控制器]、PS/2-键盘控制器端口、串口和并行端口、软盘和IDE-磁盘,以及VGA-显示器。 在过去,设备被连接到固定的端口地址,它们保留端口地址固定在那里是为了向后兼容。 查阅编程信息将告诉您需要使用的端口。
第二类是即插即用(plug-and-play)硬件。 包含大多数现代的插卡和可选设备如PCI、AGP或PCI express。 在启动时,将检查它们的端口要求,并且BIOS将为每个设备分配端口范围。 枚举PCI总线将列出所有这些设备,还可以告诉您它们使用的端口(和内存映射范围)。
第三组是旧的非即插即用兼容硬件。 它们具有跳线或固定地址,可以物理地选择正在使用的端口。 大多数ISA卡都是这样的。 您必须探测端口范围以查找可能的位置,以查看有问题的设备是否存在。 或者,您可以要求用户输入详细信息以进行配置 (例如DOS游戏中看到的soundblaster配置)。 问题是,很难列出所有设备,这使得映射时保证其他设备没有冲突成为一个潜在问题。
此端口上可能有哪些设备
唯一可行的方法是找到系统上的所有设备,然后在所有设备中分析您想要的端口。 但这种查询几乎没有任何用处。