gpt4 book ai didi

assembly - 如何计算跳转目标地址和分支目标地址?

转载 作者:行者123 更新时间:2023-12-03 08:51:11 25 4
gpt4 key购买 nike

我不熟悉汇编语言。我正在阅读有关 MIPS 体系结构的信息,并且停留在跳转目标地址分支目标地址中,如何计算它们的每个

最佳答案

(在下面的图和文本中,PC是分支指令本身的地址。PC+4是分支指令本身的末尾,也是分支延迟槽的开始。在绝对跳转图中除外)。

1.分支地址计算

在MIPS中,分支指令只有16位偏移量来确定下一条指令。我们需要在这16位值上添加一个寄存器以确定下一条指令,而该寄存器实际上是体系结构所隐含的。它是PC寄存器,因为在获取周期中PC会更新(PC + 4),以便保存下一条指令的地址。

我们还将分支距离限制为距离-2^15 to +2^15 - 1指令(分支指令之后的指令)的距离。但是,这不是真正的问题,因为大多数分支仍然是本地的。

循序渐进:

  • 符号扩展16位偏移值以保留其值。
  • 将结果值乘以4。其背后的原因是,如果我们要分支某个地址,并且PC已经字对齐,则立即值也必须字对齐。但是,使立即字对齐没有任何意义,因为我们会通过将它们强制为00来浪费低两位。
  • 现在我们有一个32位的相对偏移量。将此值添加到PC + 4,这是您的分支地址。



  • 2.跳转地址计算

    对于跳转指令,MIPS只有26位来确定跳转位置。跳跃是相对于MIPS中的PC而言的。像分支一样,立即跳转值需要字对齐;因此,我们需要将26位地址乘以4。

    再次逐步:
  • 将26位值乘以4。
  • 因为我们要相对于PC + 4值跳转,所以将PC + 4值的前四位连接到跳转地址的左侧。
  • 结果地址是跳转值。

  • 换句话说,将PC + 4的低28位替换为所取指令的低26位左移2位。

    跳转是相对于分支延迟槽的区域,而不是分支本身。 在上图中,PC在跳转计算之前已经前进到分支延迟槽。 (在经典的RISC 5级流水线中,BD是在对跳转进行解码的同一周期中获取的,因此PC + 4下一条指令地址已经可用于跳转以及分支,并相对于跳转自身的地址进行计算保存该地址将需要进行额外的工作。)

    来源: Bilkent University CS 224类(class)幻灯片

    关于assembly - 如何计算跳转目标地址和分支目标地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950230/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com