阅读:1912回复:4
请问一个IO地址的问题
我是一个初学者,我想请教各位大侠一些问题:
一个设备的IO地址范围是由硬件的结构和接口来唯一确定的吗? 一般一个设备的IO地址是一个范围,在这个范围内不同的IO地址,是不是对应于的硬件上不同的寄存器? 比如:并口打印机:378表示数据寄存器,37A表示控制寄存器,37B表示地址寄存器,这样我在程序中用out(37B,addr)此时PC是不是就只对地址寄存器进行操作,而与其它寄存器无关呢? 还有怎么知道一个寄存器的位数呢?(多少个字节),按理说,37B地址寄存器的位数应该是4位的,因为32位机器的地址是4个字节表示的,但是我看到实际它的大小是一个字节的,那它怎么能存放一个地址呢? 还有像PCI总线,它既有IO地址范围,也有内存范围(这是不是DMA的结果),那么这个内存范围是谁给分配的呢,还是与硬件的结构有关系呢?进行读写操作的时候,应该读写内存还是读写IO地址呢?请给位大侠不吝赐教. |
|
沙发#
发布于:2003-05-10 00:09
比如一个PCI设备,他的控制端可以通过相关的信号配合读取PCI设备内部寄存器,也就是IO操作,范围当然比较小。
内存可以解释为PCI设备占用内存空间,控制端分配一段内存空间满足PCI设备满足比如存取外部信息 |
|
板凳#
发布于:2003-05-10 22:25
一般的CPU(8086/RABBIT2000等)还有51他们对外部设备(包括并口、PCI、FIFO等)的访问好象都是通过I/O读写指令来完成的,至于地址,好象是随意指定的,只要影射到你CPU的地址不超过范围就OK。
|
|
地板#
发布于: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和内存分配时根据需要选择,只是映射地址方式不同,读写时所用函数不同,如此而已。 |
|
|
地下室#
发布于:2003-06-21 12:46
对于IO,数据长度,地址端口和数据端口:
IO是CPU应于操作某个设备的地址。 某个端口的数据长度则是由芯片设计是规定的,有时是1,2,4个字节。 现在的很多设备都设计成有一个地址端口和数个数据端口。 |
|