0

我知道 32 位 MIPS 指令和内存寄存器是……嗯 32 位……并且 PC 会在指令寄存器中计算该指令的地址。

我的问题是:32 位地址是否附加到 32 位指令?

忽略这些都是零的事实......

0x00000000(地址)是否与 0x00000000(指令)连接?

例如,R-Type 是

OP(6) RS(5) RT(5) RD(5) SHIFTAMMT(5) FUNCT(6) 
=> 32 bit instruction
=> 000000_00000_00000_00000_00000_000000

其中上述地址为 000000_00000_00000_00000_00000_000000

两个 32 位数字是否连接在一起,以便 PC 吐出对应于64 位值的上半部分的 32 位?我经常看到有

Address     Instruction
0x00000000  0x00000000

任何帮助,将不胜感激。

4

2 回答 2

2

您经常看到的表格显示了指令的地址和指令本身。在内存中,每个字(字节)都有一个永远不会改变的地址。地址(处理器使用的位置)和指令(存储在该位置的内容)是独立的。

于 2016-04-17T23:29:44.553 回答
0

就您所要求的而言,指令集是固定长度的,不多不少。

对于某些指令,地址包含在寄存器中,并且只需要 32 位指令的几个位来定义该寄存器。

如果寄存器不用作地址源,则指令中的一定百分比的位通常包含偏移量,因为所有指令都是 32 位,因此偏移量很可能以指令为单位而不是字节,没有必要浪费这些两位。我不记得 mips 是否有任何其他编码,如果有,那么它只能是地址的一小部分。

必须保留指令的一定百分比的位来定义该指令,基于该编码,其余位定义该指令的参数。这些指令编码有很多来源,尤其是 mips 网站。

(32 位固定长度规则有一个例外,它们有一个 16 位指令集,但这不会改变地址的编码方式,mips 不是像 x86 或其他 cisc 那样的可变长度,您可以在其中添加许多字节作为参数)

于 2016-04-19T02:21:20.823 回答