计算机的I/O端口地址表

原文地址https://blog.csdn.net/nkuzbp/article/details/7421904
PC的I O端口地址表 (I/O端口地址表)
http://tieba.baidu.com/f?kz=16042340

I/O端口地址表

PC只用了10位地址线(A0-A9)进行译码,其寻址的范围为0H-3FFH,共有1024个I/O地址。
这1024个地址中前半段(A9=0,范围为0H-1FFH)是属于主机板I/O译码, 后半段(A9=1,范围为200H-3FFH)则是用来扩展插槽上的I/O译码用。
         I/O端口功能表

I/O地址功能、用途
0DMA通道0,内存地址寄存器(DMA控制器1(8237))
1DMA通道0, 传输计数寄存器
2DMA通道1,内存地址寄存器
3DMA通道1, 传输计数寄存器
4DMA通道2,内存地址寄存器
5DMA通道2, 传输计数寄存器
6DMA通道3,内存地址寄存器
7DMA通道3, 传输计数寄存器
8DMA通道0-3的状态寄存器
0AHDMA通道0-3的屏蔽寄存器
0BHDMA通道0-3的方式寄存器
0CHDMA清除字节指针
0DHDMA主清除字节
0EHDMA通道0-3的清屏蔽寄存器
0FHDMA通道0-3的写屏蔽寄存器
19HDMA起始寄存器
20H-3FH可编程中断控制器1(8259)使用
40H可编程中断计时器(8253)使用,读/写计数器0
41H可编程中断计时器寄存器
42H可编程中断计时器杂项寄存器
43H可编程中断计时器,控制字寄存器
44H可编程中断计时器,杂项寄存器(AT)
47H可编程中断计时器,计数器0的控制字寄存器
48H-5FH可编程中断计时器使用
60H-61H键盘输入数据缓冲区
61HAT:8042键盘控制寄存器/XT:8255输出寄存器
62H8255输入寄存器
63H8255命令方式寄存器
64H8042键盘输入缓冲区/8042状态
65H-6FH8255/8042专用
70HCMOS RAM地址寄存器
71HCMOS RAM数据寄存器
80H生产测试端口
81HDMA通道2,页表地址寄存器
82HDMA通道3,页表地址寄存器
83HDMA通道1,页表地址寄存器
87HDMA通道0,页表地址寄存器
89HDMA通道6,页表地址寄存器
8AHDMA通道7,页表地址寄存器
8BHDMA通道5,页表地址寄存器
8FHDMA通道4,页表地址寄存器
93H-9FHDMA控制器专用
0A0HNM1屏蔽寄存器/可编程中断控制器2
0A1H可编程中断控制器2屏蔽
0C0HDMA通道0,内存地址寄存器(DMA控制器2(8237))
0C2HDMA通道0, 传输计数寄存器
0C4HDMA通道1,内存地址寄存器
0C6HDMA通道1, 传输计数寄存器
0C8HDMA通道2,内存地址寄存器
0CAHDMA通道2, 传输计数寄存器
0CCHDMA通道3,内存地址寄存器
0CEHDMA通道3, 传输计数寄存器
0D0HDMA状态寄存器
0D2HDMA写请求寄存器
0D4HDMA屏蔽寄存器
0D6HDMA方式寄存器
0D8HDMA清除字节指针
0DAHDMA主清
0DCHDMA清屏蔽寄存器
0DEHDMA写屏蔽寄存器
0DFH-0EFH保留
0F0H-0FFH协处理器使用
100H-16FH保留
170H1号硬盘数据寄存器
171H1号硬盘错误寄存器
172H1号硬盘数据扇区计数
173H1号硬盘扇区数
174H1号硬盘柱面(低字节)
175H1号硬盘柱面(高字节)
176H1号硬盘驱动器/磁头寄存器
177H1号硬盘状态寄存器
1F0H0号硬盘数据寄存器
1F1H0号硬盘错误寄存器
1F2H0号硬盘数据扇区计数
1F3H0号硬盘扇区数
1F4H0号硬盘柱面(低字节)
1F5H0号硬盘柱面(高字节)
1F6H0号硬盘驱动器/磁头寄存器
1F7H0号硬盘状态寄存器
1F9H-1FFH保留
200H-20FH游戏控制端口
210H-21FH扩展单元
278H3号并行口,数据端口
279H3号并行口,状态端口
27AH3号并行口,控制端口
2B0H-2DFH保留
2E0HEGA/VGA使用
2E1HGPIP(0号适配器)
2E2H数据获取(0号适配器)
2E3H数据获取(1号适配器)
2E4H-2F7H保留
2F8H2号串行口,发送/保持寄存器(RS232接口卡2)
2F9H2号串行口,中断有效寄存器
2FAH2号串行口,中断ID寄存器
2FBH2号串行口,线控制寄存器
2FCH2号串行口,调制解调控制寄存器
2FDH2号串行口,线状态寄存器
2FEH2号串行口,调制解调状态寄存器
2FFH保留
300H-31FH原形卡
320H硬盘适配器寄存器
322H硬盘适配器控制/状态寄存器
324H硬盘适配器提示/中断状态寄存器
325H-347H保留
348H-357HDCA3278
366H-36FHPC网络
372H软盘适配器数据输出/状态寄存器
375H-376H软盘适配器数据寄存器
377H软盘适配器数据输入寄存器
378H2号并行口,数据端口
379H2号并行口,状态端口
37AH2号并行口,控制端口
380H-38FHSDLC及BSC通讯
390H-393HCluster适配器0
3A0H-3AFHBSC通讯
3B0H-3BBHMDA视频寄存器
3BCH1号并行口,数据端口
3BDH1号并行口,状态端口
3BEH1号并行口,控制端口
3C0H-3CFHEGA/VGA视频寄存器
3D0H-3D7HCGA视频寄存器
3F0H-3F7H软盘控制器寄存器
3F8H1号串行口,发送/保持寄存器(RS232接口卡1)
3F9H1号串行口,中断有效寄存器
3FAH1号串行口,中断ID寄存器
3FBH1号串行口,线控制寄存器
3FCH1号串行口,调制解调控制寄存器
3FDH1号串行口,线状态寄存器
3FEH1号串行口,调制解调状态寄存器
3FFH保留

I/O端口和寻址

http://book.51cto.com/art/200812/102818.htm

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范围。因此若要让一个字符显示在屏幕上,可以直接使用内存操作指令往这个内存区域执行写操作。

I/O端口地址分配

端口地址范围分配说明端口地址范围分配说明
0x000~0x01F8237A DMA控制器10x1F0~0x1F7IDE硬盘控制器0
0x020~0x03F8259A 可编程中断控制器10x278~0x27F并行打印机端口2
0x040~0x05F8253/8254A 定时计数器0x2F8~0x2FF串行控制器2
0x060~0x06F8042 键盘控制器0x378~0x37F并行打印机端口1
0x070~0x07F访问CMOS RAM/实时时钟RTC(Real Time Clock)端口0x3B0~0x3BF单色MDA显示控制器
0x080~0x09FDMA页面寄存器访问端口0x3C0~0x3CF彩色CGA显示控制器
0x0A0~0x0BF8259A 可编程中断控制器20x3D0~0x3DF彩色EGA/VGA显示控制器
0x0C0~0x0DF8237A DMA控制器20x3F0~0x3F7软盘控制器
0x0F0~0x0FF协处理器访问端口0x3F8~0x3FF串行控制器1
0x170~0x177IDE硬盘控制器1

对于使用EISA或PCI等总线结构的现代PC,有64KB的I/O地址空间可供使用。在普通Linux系统下通过查看/proc/ioports文件可以得到相关控制器或设置使用的I/O地址范围:

[root@plinux root]# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial(auto)
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
0500-051f : PCI device 8086:24d3 (Intel Corp.)
0cf8-0cff : PCI conf1
da00-daff : VIA Technologies, Inc. VT6102 [Rhine-II]
da00-daff : via-rhine
e000-e01f : PCI device 8086:24d4 (Intel Corp.)
e000-e01f : usb-uhci
e100-e11f : PCI device 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
f000-f00f : PCI device 8086:24db (Intel Corp.)
f000-f007 : ide0
f008-f00f : ide1
[root@plinux root]#
主存储器

当计算机上电初始化时,物理内存被设置成从地址0开始的连续区域。除了地址从0xA0000~0xFFFFF(640KB~1MB,共384KB)和 0xFFFE0000~0xFFFFFFFF(4GB处的最后64KB)范围以外的所有内存都可用做系统内存。这两个特定范围被用于I/O设备和BIOS 程序。假如我们的计算机中有16MB的物理内存,那么在Linux 0.1x系统中,0~640KB将被用做存放内核代码和数据。Linux内核不使用BIOS功能,也不使用BIOS设置的中断向量表。640KB~1MB 之间的384KB仍然保留用作图中指明的用途。其中地址从0xA0000开始的128KB用做显示内存缓冲区,随后部分用于其他控制卡的ROM BIOS或其映射区域,而0xF0000~1MB范围用于高端系统ROM BIOS的映射区。1MB~16MB将被内核用做可分配的主内存区。另外高速缓冲区和内存虚拟盘也会占用内核代码和数据后面的一部分内存区域。该区域通常会跨越640KB~1MB的区域。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值