最高内存传输

问题描述

假设一条跳转指令位于内存地址 0x20CE88C0。此跳转可以将控制转移到的最高(即最大)32 位内存地址是多少? 我知道最高地址可以是 2^26,但我看到其他人说 2^28。我不明白其中的区别。为什么是 2^28?

解决方法

J-Type 指令非常简单:

opcode  target
   6      26              // field size,as bit count

target := instruction[25:0]
JumpAddr := { PC+4[31:28],target,2'b0 }
PC := JumpAddr

这是 MIPS Green Sheet / Quick Reference 数据中的描述。虽然是一个有点有趣的符号(某种 RTL),但它告诉我们处理器如何解码 J 类型指令,从而告诉我们需要了解的有关跳转指令的可能范围的信息。

这意味着当前的 PC+4 提供了新 PC 地址的高 4 位。然后地址字段,有时称为 immediate 也称为 target - 无论哪种方式都是 26 位宽 - 提供接下来的 26 位,然后 00 是接下来的 2 位,总共 32 位值下一台电脑。

因此,利用这些信息,您可以计算或形成从给定的 PC 可以到达的最大可能地址。取 PC+4 的前 4 位,然后(字符串/连接到这 4 位)一个 26 位最大值——它的 26 位无符号,所以 26 个全 1 是最大值——然后连接一个 00(两个零位)并从给定的 j 开始,从 jal/PC 生成最大可寻址位置的确切地址的 32 位值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...