我正在尝试了解miips指令的工作原理,并查看bne
指令。我想我在很高的层次上理解它,我只是有几个问题。
例如,假设我使用命令bne $R0, $R10, X
。这与说$R0
不等于$R10
,跳转到地址X
(地址X
计算为PC+4+4*X
)和{{1}相同是一些整数)。
当你看一个标准的寄存器表(我在Google上发现几个相同的,我认为它们是标准的)时,有31个寄存器。因此,当您为X
指定值时,这是否意味着X
仅限于4 * X
< 31? (或者由于0-31范围内的几个寄存器被保留供系统使用?或者更受限制),或者它是内存中的地址,而不是寄存器?
我知道如果我使用X
我使用寄存器8-15,而$t0-$t7
使用寄存器17-23,但其中$s0-$s7
(对于某些整数k< ; 32,我假设)位于?这是我用于$R0-$Rk
等的32个寄存器吗?例如,$t0, $s5
,注册10和$R10
是一样的吗?
答案 0 :(得分:1)
当您查看标准注册表(我在Google上发现几个相同的,我认为它们是标准的)时,有31个寄存器。
这不完全正确。 MIPS上有32个通用寄存器,计数r0
,以及一些特殊用途寄存器,如pc
,lo
和hi
,以及浮动 - 点寄存器。
因此,当您为
X
指定值时,这是否意味着X
仅限于4 *X
< 31? (或者更受限制,因为0-31范围内的几个寄存器是为系统使用而保留的?),或者是内存中的地址,而不是寄存器?
都不是。 X
的值在指令中指定为常量。编码如下:
BNE: 0001 01ss ssst tttt iiii iiii iiii iiii
此指令的编码以6位标头(000101
)开头,每个源寄存器和目标寄存器使用5位(s
和t
),并使用有符号16位偏移量(i
)的指令的剩余16位。此偏移量被视为相对于下一台PC的指令计数 - 因此,您可以在每个方向上跳转到64 KB。
我知道如果我使用
$t0-$t7
我使用寄存器8-15,而$s0-$s7
使用寄存器17-23,但其中$R0-$Rk
(对于某些整数k <32,我假设)位于?这是我用于$t0, $s5
等的32个寄存器吗?例如,$R10
,注册10和$t2
是一样的吗?
是 - 某些MIPS通用寄存器有多个名称。 r10
和“寄存器10”都是按寄存器的位置引用寄存器,而t2
是指它作为 T 临时寄存器的常规用法。