- 论坛徽章:
- 0
|
本帖最后由 lqshixinlei 于 2010-05-26 09:13 编辑
一般介绍8259A的书上都说,
由于8086的数据线宽为16位,而8259A的数据线8位只能接在数据总线的低8位上,
所以CPU要使用两个相邻的偶地址来寻址8259A的一对奇偶端口,只要使用数据总线的
A1接到8259A的A0即可,
那么照这样32位机中是否cpu对8259A寻址端口号为4的倍数?
可是我在Linux源代码中发现对主8259A的初始化仍然使用20H和21H,
21h不是2的倍数,更谈不上4的倍数呢?
这到底应该怎么解释?
我的意思是,假如在8086系统中(80386类似不过是32位),CPU用数据总线传输16位数据时,总是把数据送到以偶地址开头的两个相邻单元或者两个相邻端口。当CPU往内存传输数据时,低8位数据传输到较低的偶地址单元,高8位数据传输到较高的奇地址单元。
所以,如果采用21H的端口地址,由于它不是一个偶地址,所以传输数据的时候,数据不会出现在低8位数据总线上,而PC/AT的中断系统又是直接将CPU的D0-D7与8259的D0-D7相连,那这样数据传输不就出错了吗?
有哪位大哥给解释一下,小弟万分感激。 |
|