在哪里获取I / O端口地址分配

问题描述 投票:1回答:1

我最近一直在学习汇编语言,而且我已经知道如何使用in / out命令。但是我有一些问题:端口地址来自哪里,例如0x70。我怎么知道我的计算机有多少个端口及其地址。

我已经查看了英特尔开发人员手册,但找不到答案。

谢谢您的关注

assembly io x86 hardware pc
1个回答
0
投票

最多有65536个端口,并且大多数未使用。

现代PC上使用的IO端口可以分为两类:PCI设备和旧设备。

对于PCI设备;每个设备(PCI规范所用术语中的“功能”)都有一些配置空间,其中包含“ BAR”(基地址寄存器)。每个BAR表示设备使用的区域是在物理地址空间还是IO端口空间中;如果它在IO端口空间中,BAR会告诉您每个基本IO端口有多少个IO端口。

旧版设备(在采用PCI之前是内置于主板或通过ISA总线连接的设备,但现在可能仍然存在)使用固定的IO端口。例如,主PIC控制器将始终使用IO端口0x20和0x21(如果存在)。理想地;您将决定支持旧版设备并查看其文档,其文档将告诉您要使用的IO端口以及它们的功能。请注意(由于ISA总线限制),所有这些IO端口都将小于或等于0x3FF。当然,如果您不是为旧版设备编写设备驱动程序,那么您实际上不需要关心其IO端口可能是多少。

注1:对于具有ISA插槽的计算机(例如,比1990年代中期更旧的计算机),您可以插入任何类型的ISA卡;而且每张卡所使用的IO端口通常由卡本身上的一些“ DIP开关”控制。软件(操作系统)无法自动检测设备的IO端口(也无法自动检测存在的设备)。解决此问题的唯一方法是要求用户告诉您,并希望他们记住并正确设置(并将详细信息存储在配置文件中)。这对每个人来说都是可怕的,幸运的是后来的总线(PCI)避免了这个问题。

注2:实际上有一个“即插即用ISA”规范(来自Microsoft),以添加一种自动检测ISA设备及其资源(例如IO端口)的方法。对于支持此规范的ISA卡而言,无论是好是坏,这种情况都很少见。主要是因为PCI在大多数制造商试图支持它之前就已经出现。既然ISA插槽已经过时了(我们剩下一些带有固定IO端口的内置主板旧件了),那么就没有必要支持它了(或者一般来说是ISA插槽)。

注3:我忽略了某些PC上短暂存在的其他总线类型(EISA,MCA)。这些在使用时并不常见,现在非常罕见(例如,您可能会在博物馆的某个地方找到这种作品,但是它们不会让您带它去在其上测试软件)。

注4:一些CPU(主要是1980年代末和1990年代初来自Cryix和IBM的CPU)使用了一些IO端口作为CPU本身,并将它们用作各种功能(CPU功能和缓存控制)的配置寄存器。再次;现在都太老了,不要紧。

© www.soinside.com 2019 - 2024. All rights reserved.