基于索引寻址模式内存总和



我有一条指令:ADD [BX][SI] + 5FFDH, EABFH,我想知道它是如何在8086微处理器上准确运行的。我已经意识到这个指令ADD [BX][SI] + 5FFDH, EABFH以这种方式工作:

  1. 2个字节的数据从数据总线到达并进入指令队列
  2. 指令队列中可用的数据进入指令解码器
  3. 另外2个字节的数据从数据总线到达并进入指令队列
  4. BX和SI值进入ALU并计算BX + SI
  5. 另外2个字节的数据从数据总线到达并进入指令队列
  6. BX + SI进入ALU的输入端
  7. 5FFDH从指令队列弹出并进入ALU的输入
  8. ALU计算CCD_ 6
  9. BX + SI + 5FFDH通过地址总线进入存储器
  10. BX + SI + 5FFDH的值来自内存并进入ALU的输入端
  11. EABFH从指令队列弹出并进入ALU的输入
  12. CCD_ 10通过ALU进行计算

所以我的问题在第13步。微处理器如何根据空指令队列知道存储器地址(BX + SI + 5FFDH(来将[BX + SI + 5FFDH] + EABFH的值发送到存储器,而我们无法再次计算BX + SI + 5FFDH

8086几乎肯定有一些内部tmp存储,其微码可以用来存储RMW指令的地址计算结果。它不像MIPS那样是流水线式的!(但是IIRC,你说得对,它使用ALU进行地址计算,而没有专用的AGU(。

理论上,没有什么能阻止它重新计算地址,但保留地址比保留原始指令字节更明智。

请记住,8086是由微码驱动的,有点像使用内部资源实现x86的解释器。因此,临时存储就像一个寄存器,而不是8086指令可见的体系结构寄存器。

在这种情况下,可以想象有一些用于数据访问的电路将地址发送到总线接口单元,与代码获取竞争。数据端的一些地址寄存器可以简单地保存最后使用的数据地址,这是完全合理的,即使代码提取从其间的不同地址读取。


如果你真的对全部细节感到好奇,看看http://www.righto.com/2020/08/reverse-engineering-8086s.html(Ken Shirrif的博客(已经了解了微码如何处理存储器目标ALU指令。

顺便说一句,作为地址计算的一部分,您忘记了DS段的基本地址。

相关内容

  • 没有找到相关文章

最新更新