【问题标题】:Based Indexed Addressing Mode Memory Sum基于索引寻址模式内存总和
【发布时间】:2021-08-24 09:23:42
【问题描述】:

我有一条指令: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 计算 BX + SI + 5FFDH
  9. BX + SI + 5FFDH 通过地址总线进入内存。
  10. BX + SI + 5FFDH 的值来自内存并进入 ALU 的输入。
  11. EABFH 从指令队列中弹出并进入 ALU 的输入。
  12. [BX + SI + 5FFDH] + EABFH 由 ALU 计算。
  13. ?????????????

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

【问题讨论】:

  • 您在计算过程中忘记了 DS 段基地址。此外,8086 几乎可以肯定有一些内部 tmp 存储,它的微码可以使用它来存储 RMW 指令的地址计算结果。它不像 MIPS 那样完全流水线化! (但是 IIRC,你说得对,它使用 ALU 进行地址计算,没有专用的 AGU)。从理论上讲,没有什么能阻止它重新计算地址,但保留地址比保留原始指令字节要明智得多。
  • @PeterCordes 感谢您的回答,您说得对,我忘记了 DS 段。我还有一个问题:内部 tmp 存储在哪里?它在 ALU 中吗?
  • 不,我不希望它在 ALU 本身中,让 ALU 也成为寄存器文件是没有意义的。用更具体的猜测更新了我的答案。
  • 顺便说一句,如果您对 original-8086 微架构细节(或使用它的系统)有进一步的问答,您最有可能在 retrocomputing.stackexchange.com 上获得详细答案。我只是用手挥动了一些猜测,但如果那里的一些常客真的知道,我也不会感到惊讶,并且还能够确认或纠正您的猜测,即在获取操作码和 modrm 之后指令执行开始,甚至在完整指令之前完全获取。这不是现代 x86 的工作方式,但对于标量微编码 8086 来说听起来似乎是合理的。

标签: assembly cpu-architecture x86-16 microprocessors micro-architecture


【解决方案1】:

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

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

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

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


如果您真的对全部细节感到好奇,请查看http://www.righto.com/2020/08/reverse-engineering-8086s.html(Ken Shirriff 的 blog) 已经了解了微码如何处理内存目标 ALU 指令。

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

【讨论】:

  • 您的意思是该地址将保存在微码的存储中吗?内部 tmp 存储到底在哪里?
  • @user3866081:或多或少是的。我不知道也不关心确切的细节。如果你想要更多,谷歌了解更多关于 8086 微码如何工作的详细信息,以及它可以使用的内部状态,与架构状态分开。如果你没有找到任何东西,你可以在retrocomputing.stackexchange.com 上提问
猜你喜欢
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2016-03-07
相关资源
最近更新 更多