8086无法访问外部存储器

时间:2019-10-31 12:32:22

标签: assembly x86-16

我们正在研究一个Proteus模拟,该模拟实际上具有8x(2KB)外部存储器(6116),但到目前为止我们仍无法访问外部存储器。该课题说,外部存储器地址应从0x14000开始,我们设计了适当的解码器逻辑。并尝试了以下三种方式访问​​该地址:

目标:从0x14000开始将值从内部寄存器移至外部存储器

1-一起使用ORG和MOV指令
2-一起使用ORG $ PUSH-POP指令
3-不使用ORG指令+将1400移至DS(DataSegmentRegister)

但他们都不行 任何帮助将不胜感激

https://drive.google.com/open?id=1Eznyj0pQfS2ccj5eIesYnnle01v2ftId

2 个答案:

答案 0 :(得分:1)

ORG仅告诉编译器期望代码(和静态数据)在内存中的位置。 (因此mov ax, OFFSET my_label可以汇编到正确的数字地址)。这不是您所需要的,除非您正在此高地址加载代码,并在其附近带有标签的数据

相反,您可以将DS(和/或ES)设置为数字值,并使用相对于此的偏移量来寻址内存。

mov  ax, 0x1400
mov  ds, ax
mov  byte ptr [0], cl

它将一个字节(从CL)存储到1400:000,该字节在实模式下是线性地址0x14000

如果这不能满足您的要求,那么您还遇到了(虚拟)硬件问题,而不是软件问题。也许在https://electronics.stackexchange.com/

上询问该部分

答案 1 :(得分:0)

一种可能的解决方案是两次(仅)写入第一次内存访问。
这可能与Proteus中的错误有关,这确实很奇怪

如您所见, 00h 存储器访问指令重复了两次,但对于 01h 指令之类的指令,通常无需重复执行

工作片段如下所示...

MOV AX,DATA_HERE
MOV DS, AX

MOV AX,1400H
MOV DS , AX

MOV CL,07H
MOV BX,00h
MOV [BX],CL

MOV CL,09H
MOV BX,00h
MOV [BX],CL

MOV CL,08h
MOV BX,01h
MOV [BX],CL