寻址空间一般指的是CPU对于
内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在
存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据存放在哪里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以
字节为单位 ,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是32位的CPU最大能搭配4G内存的原因 ,再多的话CPU就找不到了。
CPU为了访问
I/O接口控制器或控制卡上的数据和状态信息,需要首先指定它们的地址。这种地址就称为I/O
端口地址或者简称端口。通常,一个
I/O控制器包含访问数据的数据端口、输出命令的命令端口和访问控制器
执行状态的状态端口。端口地址的设置方法一般有两种:
统一编址和
独立编址。
端口统一编址的原理是把I/O控制器中的端口地址归入
存储器寻址
地址空间范围内。因此这种
编址方式也称为
存储器映像编址。CPU访问一个端口的操作与访问内存的操作一样,也使用访问内存的指令。端口独立编址的方法是把I/O控制器和控制卡的寻址空间单独作为一个独立的地址空间对待,称为
I/O地址空间。每个端口有一个I/O地址与之对应,并且使用专门的
I/O指令来访问端口。
IBM PC及其
兼容机主要使用独立编址方式,采用了一个独立的I/O地址空间对控制设备中的
寄存器进行寻址和访问。使用
ISA总线结构的传统PC,其I/O地址空间范围是0x000~0x3FF,有1024个I/O
端口地址可供使用。各个控制器和控制卡所默认分配使用的端口地址范围见表2-1。关于这些端口的使用和编程方法将在后面具体涉及相关硬件时再详细进行说明。
另外,IBM PC也部分地使用了
统一编址方式。例如,CGA显示卡上
显示内存的地址就直接占用了
存储器地址空间0xB800~0xBC00范围。因此若要让一个字符显示在屏幕上,可以直接使用内存操作指令往这个内存区域执行写操作。
对于使用EISA或PCI等
总线结构的现代PC,有64KB的
I/O地址空间可供使用。在普通Linux系统下通过查看/proc/ioports文件可以得到相关控制器或设置使用的I/O地址范围: