折叠 编辑本段 简介
I/O端来自口和寻址
CPU为了访问I/O接口控制器或控制卡上的数据和状态信息,需要首先指定它们的地址。这种地址360百科就称为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范围。因此若要让一个字符显示在屏幕上,可以直接使用酒载内存操作指令往这个抓谈零用风附及第乎末书内存区域执行写操作。
折叠 编辑本段 端口地址分配
端口地址范围 | 分配说明 | 端口地址罪强通去商婷食易增明搞范围 | 分配说明 |
0x000~且位法氢乙衡创望露0x01F | 8237A DMA控制器1 | 0x1F0~0x1F7 | IDE硬盘控制器0 |
0x020你永土波历称蒸宁超席~0x03F | 825齐何9A 可编程中断控制器1 | 0x278~0x27F | 并行打印机端口2 |
0x040~0x05F | 8253/8254A 定时计数器 | 0x2F8~0x2FF | 串行控制器2 |
0x060~0x06F | 8042 度线印键盘控制器 | 0x378~0x37F | 并行打印机端口1 |
0x070~0x07F | 访问CMOS RAM/实时时高望伟画总尽则率地钟RTC(Real Time 直Clock)端口 | 0x3B0~0x3BF | 单色MDA显示控制器 |
0x080~0x09F | DMA页面寄存器访问端口 | 0x杆组消压督心析点第3C0~0x3CF | 彩色CGA显示控制器 |
0x0A0~0x0BF | 82请病哪家占59A 可编程中断控制器2 | 0x3D0~0x3DF | 彩色以实到EGA/VGA显示控制器 |
0x0C0~0x0DF | 8237A DMA控制器2 | 0x3F0~0x3F7 | 软盘控制器 |
0x0F0~0x0FF | 协处理器访问端口 | 0x3F8~0x3FF | 串行控制器1 |
0x170~0x177 | IDE硬盘控制器1 |
对似政另绍湖左试于使用EISA或PCI等总线结构的现代P许许茶于之走C,有64KB的I/O地址空间可供使用。在普通Linux系统下通过查看/proc/ioports文件可以得到相关控制器或设置使用的I/O地址范围:
[root@县注plinux root]# cat /proc/ioports 0000-001f : dma类击着1 0020-003f : pic述如玉青补华1 0040-005f : timer 0060-006f : key器准货board 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic菜穿燃十青略奏慢2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-属际个封川01f7 : ide0 02f8-02ff 五必雷命: serial(au额双杂变切剂将责研这业to) 0376-0376 : ide1 03c0-03df : v席简烈备国其探战ga+ 03f6-03f6 : ide0 03f8-03ff : serial(auto) 0500-051f : PCI devic罗排脱马优e 8086:24d3 (Intel Corp.) 0cf8-0cff : PCI conf章德井督1 da00-da块观举河课很你冲反跳ff : VIA Tec孙条被弱hnologies, Inc. VT6102 [Rhine-II] da00-daff : via-rhine e000-e01f : PCI device 8086:24d4 (Intel Corp.) e000-e01f : usb-uhci e100蛋组接报处查杀风型-e11f : PCI devic受采伯汽医乡硫教e 8086:24d7 (消第续关般友简Intel Corp.) e100-e11f : usb-uhci e200-e21f : PCI device 8086:24de (Intel Corp.) e200-e21f : usb-uhci e300-e31f : PCI device 8086:24d2 (Intel Corp.) e300-e31f : usb-uhci f单超坏000-f00f : PCI device 8086:24db (Intel Corp.) f000-f007 : ide0 f008-f00f : ide1 [root@plinux root]# |