8086最小模式下如何从两片8位EPROM读取16位数据?
8086最小模式下双8位EPROM的正确连接与数据存储方案
你的问题核心是没搞清楚8086的奇偶体存储映射机制,直接把两片EPROM地址线全接导致数据错位,CPU无法正确读取指令。下面是具体的解决方法:
一、硬件连接的正确配置
8086是16位CPU,低8位数据总线(D0-D7)对应偶地址(A0=0),高8位(D8-D15)对应奇地址(A0=1),两片EPROM要分别作为偶体和奇体,连接方式必须区分:
- 偶体EPROM(接D0-D7):
- 地址线:直接连接锁存后的CPU地址线A15~A0
- 片选信号:需结合
A0=0和存储器读信号(最小模式下为MRDC#),或者通过地址译码器生成对应FFFF0H~FFFFAH区间的选通信号,确保只有偶地址访问时选通该片
- 奇体EPROM(接D8-D15):
- 地址线:连接锁存后的CPU地址线A15~A1,自身的A0引脚直接接高电平(VCC)
- 片选信号:需结合
BHE#=0(总线高允许信号,最小模式下低电平有效,表示高8位总线可用)和地址译码器的区间选通信号,确保只有奇地址访问时选通该片
二、EPROM的指令写入规则
8086采用小端字节序,16位指令/数据的低字节存在偶地址,高字节存在奇地址。你的测试指令对应的地址分布和写入内容如下:
| CPU地址 | 类型 | EPROM位置 | 存储数据 | 对应指令片段 |
|---|---|---|---|---|
| FFFF0H | 偶地址 | 偶体EPROM FFFF0H | B8 | mov ax,45H操作码 |
| FFFF1H | 奇地址 | 奇体EPROM FFFFH | 45 | mov ax,45H立即数 |
| FFFF2H | 偶地址 | 偶体EPROM FFFF2H | 05 | add ax,6H操作码 |
| FFFF3H | 奇地址 | 奇体EPROM FFF0H | 06 | add ax,6H立即数 |
| FFFF4H | 偶地址 | 偶体EPROM FFFF4H | A3 | mov [6000H],ax操作码 |
| FFFF5H | 奇地址 | 奇体EPROM FFF1H | 00 | mov [6000H],ax偏移低字节 |
| FFFF6H | 偶地址 | 偶体EPROM FFFF6H | 60 | mov [6000H],ax偏移高字节 |
注意:奇体EPROM的内部地址是CPU地址的A1A15组成的数值,比如CPU地址FFFF1H对应奇体的内部地址FFFFH(因为A1A15是FFFFH,A0接高),CPU地址FFFF3H对应奇体的内部地址FFF0H,以此类推。
三、你之前方案的问题
把两片EPROM的A0~A15全接相同地址线时,CPU访问FFFF0H(偶地址)时,两片EPROM都输出自身FFFF0H单元的数据,但CPU需要的高8位数据是奇地址FFFF1H对应的内容,导致指令字节错位,CPU无法识别有效指令,自然无法执行。
内容的提问来源于stack exchange,提问作者Freddy Flint
相关产品推荐
相关产品推荐

