coverlove
驱动牛犊
驱动牛犊
  • 注册日期2003-05-04
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1843回复:4

请问一个IO地址的问题

楼主#
更多 发布于:2003-05-07 11:13
我是一个初学者,我想请教各位大侠一些问题:
  一个设备的IO地址范围是由硬件的结构和接口来唯一确定的吗?
  一般一个设备的IO地址是一个范围,在这个范围内不同的IO地址,是不是对应于的硬件上不同的寄存器?
  比如:并口打印机:378表示数据寄存器,37A表示控制寄存器,37B表示地址寄存器,这样我在程序中用out(37B,addr)此时PC是不是就只对地址寄存器进行操作,而与其它寄存器无关呢?
   还有怎么知道一个寄存器的位数呢?(多少个字节),按理说,37B地址寄存器的位数应该是4位的,因为32位机器的地址是4个字节表示的,但是我看到实际它的大小是一个字节的,那它怎么能存放一个地址呢?
   还有像PCI总线,它既有IO地址范围,也有内存范围(这是不是DMA的结果),那么这个内存范围是谁给分配的呢,还是与硬件的结构有关系呢?进行读写操作的时候,应该读写内存还是读写IO地址呢?请给位大侠不吝赐教.
FOCHIN
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2004-07-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-10 00:09
比如一个PCI设备,他的控制端可以通过相关的信号配合读取PCI设备内部寄存器,也就是IO操作,范围当然比较小。
内存可以解释为PCI设备占用内存空间,控制端分配一段内存空间满足PCI设备满足比如存取外部信息
mailaoda
驱动牛犊
驱动牛犊
  • 注册日期2002-12-31
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望11点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-10 22:25
   一般的CPU(8086/RABBIT2000等)还有51他们对外部设备(包括并口、PCI、FIFO等)的访问好象都是通过I/O读写指令来完成的,至于地址,好象是随意指定的,只要影射到你CPU的地址不超过范围就OK。
hglzw
驱动小牛
驱动小牛
  • 注册日期2001-06-12
  • 最后登录2006-03-03
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-16 16:18
一般一个设备的IO地址是一个范围,在这个范围内不同的IO地址,是不是对应于的硬件上不同的寄存器?
***********************************
正确!
*****************************************
比如:并口打印机:378表示数据寄存器,37A表示控制寄存器,37B表示地址寄存器,这样我在程序中用out(37B,addr)此时PC是不是就只对地址寄存器进行操作,而与其它寄存器无关呢?
*********************************
对!
*****************************************
还有怎么知道一个寄存器的位数呢?(多少个字节),按理说,37B地址寄存器的位数应该是4位的,因为32位机器的地址是4个字节表示的,但是我看到实际它的大小是一个字节的,那它怎么能存放一个地址呢?
***************************
cpu目前io地址是8位或16位,不要和32位的概念混淆。32位是虚拟地址。也不要和并口的寄存器混淆。37b是cpu的一个io地址,16位的。这个地址所指的寄存器是个8位的(并口的数据总线是8位的),向这个寄存器里写个东西是给打印机用呢。与io地址无关.
*******************************************
还有像PCI总线,它既有IO地址范围,也有内存范围(这是不是DMA的结果),那么这个内存范围是谁给分配的呢,还是与硬件的结构有关系呢?进行读写操作的时候,应该读写内存还是读写IO地址呢?
************************************
IO和内存分配时根据需要选择,只是映射地址方式不同,读写时所用函数不同,如此而已。
[img]http://www.kinboh.com/images/5130.jpg[/img]
jack_zhu
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2008-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-21 12:46
对于IO,数据长度,地址端口和数据端口:
IO是CPU应于操作某个设备的地址。
某个端口的数据长度则是由芯片设计是规定的,有时是1,2,4个字节。
现在的很多设备都设计成有一个地址端口和数个数据端口。
游客

返回顶部