gpt4 book ai didi

assembly - MIPS跳转指令编码: why left shifted,为什么保留PC的高4位?

转载 作者:行者123 更新时间:2023-12-05 02:08:21 25 4
gpt4 key购买 nike

在跳转指令中,

  1. 为什么要将 26 位地址转换为 28 位地址?
  2. 为什么要将 PC 最左边的 4 位添加到 28 位?

最佳答案

Why do we shift 26-bit address to 28-bit?

当我们将地址移动 2 位时,跳转指令的参数(地址)可以在 0...2^28-1 范围内。

如果我们不移动地址,它只能在 0...2^26-1 范围内。

这意味着我们只能使用 1/4 的地址空间。

另一方面,不转移地址的明显好处并不是真正的好处:

不移动地址将允许使用不能被 4 整除的地址。但是,因为指令总是位于能被 4 整除的地址,跳转指令到不能被 4 整除的地址是没有意义的。

顺便说一句:其他 CPU(例如 MC68000)确实使用 16 位“分支”(跳转)指令,其中低位必须始终为零 - 因此如果 CPU 将地址移位 1,则可以寻址更多内存.

why do we add the leftmost 4-bit from PC to the 28-bit?

PC 寄存器为 32 位宽,跳转指令仅包含 26 位。所以我们必须从其他地方取 6 位:

PC 寄存器的低 2 位始终为零,因此我们仍然要考虑“左”4 位。

如果我们总是将左边的 4 位设置为零,我们只能跳转到位于前 256 兆字节内存中的某些代码。

如果我们简单地不修改 PC 的左 4 位,我们可以跳转到与跳转指令本身位于相同 256 兆字节范围内的一些代码。

让我们考虑一个 for()while() 循环:

在这样的循环结束时,有一个跳转到循环开始的指令。

假设程序不一定位于内存的前 256 兆字节中。

更有可能的是:

循环的开始与循环的结束(跳转指令)在相同的 256 兆字节范围内,或者循环的开始在前 256 兆字节的内存中?

关于assembly - MIPS跳转指令编码: why left shifted,为什么保留PC的高4位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61065614/

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