阅读:1066回复:4
请教各位大侠一个IO地址的问题
我是一个初学者,我想问各位大侠一个问题:
一个设备的IO地址范围是由硬件的结构和接口来唯一确定的吗? 一般一个设备的IO地址是一个范围,在这个范围内不同的IO地址,是不是对应于的硬件上不同的寄存器? 比如:并口打印机:378表示数据寄存器,37A表示控制寄存器,37B表示地址寄存器,这样我在程序中用out(37B,addr)此时PC是不是就只对地址寄存器进行操作,而与其它寄存器无关呢? 还有怎么知道一个寄存器的位数呢?(多少个字节),按理说,37B地址寄存器的位数应该是4位的,因为32位机器的地址是4个字节表示的,但是我看到实际它的大小是一个字节的,那它怎么能存放一个地址呢? 还有像PCI总线,它既有IO地址范围,也有内存范围(这是不是DMA的结果),那么这个内存范围是谁给分配的呢,还是与硬件的结构有关系呢?进行读写操作的时候,应该读写内存还是读写IO地址呢?请给位大侠不吝赐教. |
|
沙发#
发布于:2003-05-07 14:34
对于主板或者插到主板上的扩展卡上的设备的寻址方式,有两类,I/O寻址和内存寻址,他们分别对应于CPU上不同的指令。这些地址是多少完全是由硬件来决定的,硬件做好了,这些地址就定死了,对于ISA的我理解是这样,PCI的,没接触过,就不知道了。
你说的那个OUT函数,对哪个地址写,是正确的和 其他地址是没关系的。至于寄存器的位数你看电路图,看有多少根数据线和寄存器连,就是多少位的。ISA的,除了8就是16。你说的那个地址你理解错了,不是那么简单。 |
|
|
板凳#
发布于:2003-05-07 17:06
这些地址是多少完全是由硬件来决定的,硬件做好了,这些地址就定死了:
对于上面的说法我有些不明白的地方,IO地址是由硬件结构决定的,但是内存的分配应该是系统给分配的,这么能由硬件定死呢?那样的话,岂不会造成冲突? 还有你说的: 你说的那个地址你理解错了,不是那么简单。 这句话,是什么含义,难道不是选择不同的寄存器吗.请大侠指点,我刚刚学习硬件驱动,不是很清楚,请指点。 |
|
地板#
发布于:2003-05-07 20:53
这些地址是多少完全是由硬件来决定的,硬件做好了,这些地址就定死了:
对于上面的说法我有些不明白的地方,IO地址是由硬件结构决定的,但是内存的分配应该是系统给分配的,这么能由硬件定死呢?那样的话,岂不会造成冲突? 关于板子上映射内存的分配也要按一定的协议来分配的,比如ISA的映射内存的范围,规定了一段给用户使用的,也需要译码来选中的。 还有你说的: 你说的那个地址你理解错了,不是那么简单。 这句话,是什么含义,难道不是选择不同的寄存器吗.请大侠指点,我刚刚学习硬件驱动,不是很清楚,请指点。 这个我也不十分理解,PCI我没研究过。真的,我知道的就这些了 |
|
|
地下室#
发布于:2003-05-08 23:34
pci 是pnp的东东,其地址是动态分配的,要获取它,可在 IRP 中取得,具体的看IRP结构。 :)
|
|