使用Mips汇编语言中的寄存器

时间:2014-02-16 02:58:44

标签: assembly cpu-registers

我正在尝试了解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是一样的吗?

1 个答案:

答案 0 :(得分:1)

  

当您查看标准注册表(我在Google上发现几个相同的,我认为它们是标准的)时,有31个寄存器。

这不完全正确。 MIPS上有32个通用寄存器,计数r0,以及一些特殊用途寄存器,如pclohi,以及浮动 - 点寄存器。

  

因此,当您为X指定值时,这是否意味着X仅限于4 * X< 31? (或者更受限制,因为0-31范围内的几个寄存器是为系统使用而保留的?),或者是内存中的地址,而不是寄存器?

都不是。 X的值在指令中指定为常量。编码如下:

BNE: 0001 01ss ssst tttt  iiii iiii iiii iiii

此指令的编码以6位标头(000101)开头,每个源寄存器和目标寄存器使用5位(st),并使用有符号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 临时寄存器的常规用法。