当前位置: 代码迷 >> 汇编语言 >> PC/AT存储器读写有关问题
  详细解决方案

PC/AT存储器读写有关问题

热度:97   发布时间:2016-05-02 04:30:19.0
PC/AT存储器读写问题
大家都知道,在扩展16位的ISA总线上,地址映射到内存上是分奇偶操作,16位的数据高8位放到偶地址,低8位放到奇地址,奇地址由地址线A0操作,高8位由ISA总线上的BHE(高位允许使能)操作。
但是在对ISA总线上的存储器进行写操作时会出现一个问题,当往高8位写数据时,这个数据会自动复制一个到低8位,例如我写0x12到一个奇地址,这时偶地址也会自动被写入了0x12,如果我往偶地址写个16位数据,高8位会放到相邻奇地址,这时,低8位也会被写入了高8位的数据。
为什么呢?如何才能正确地操作PC/AT的数据读写。
------解决思路----------------------
你竟然有PC/AT这样的古董?
我记得PC/AT是可以使用8位数据而非16位数据的,有一根线指示主板是哪种数据宽度。你那个什么CPU? 486?
------解决思路----------------------
AT使用16位ISA总线,不过也支持8位总线操作,有一个M16#引脚控制内存访问是16位还是8位。

------解决思路----------------------
实际上,PC的硬件架构一直以来都是支持动态总线周期的,每一个总线周期可以是8/16/32/64位操作之一(从Pentium开始支持64位数据总线),而且小宽度的总线周期可以使用数据总线的宽度对齐部分进行数据传输,比如在32位总线上的8位总线周期可以使用D0-D7、D8-D15、D16-D23、D24-D31中的一组进行传输,不是必须用D0-D7,字节允许信号由BE0#、BE1#、BE2#、BE3#来控制,ISA应该也有类似的机制,不过这个东西太老了,我记不住那么多数据,手边又没有相关文档,就不多说了。
  相关解决方案