Assembly 在Miips汇编语言中使用寄存器

Assembly 在Miips汇编语言中使用寄存器,assembly,cpu-registers,Assembly,Cpu Registers,我试图了解miips指令是如何工作的,并查看了bne指令。我想我对它有很高的理解,我只是有几个问题 例如,假设我使用命令bne$R0,$R10,X。这与如果$R0不等于$R10,跳转到地址X(其中地址X计算为PC+4+4*X,而X是某个整数) 当你看一个标准寄存器表时(我在谷歌上发现了几个相同的,我假设它们是标准的),共有31个寄存器。因此,当您为X指定一个值时,是否意味着X的值被限制为4*X

我试图了解miips指令是如何工作的,并查看了
bne
指令。我想我对它有很高的理解,我只是有几个问题

例如,假设我使用命令
bne$R0,$R10,X
。这与如果
$R0
不等于
$R10
,跳转到地址
X
(其中地址
X
计算为
PC+4+4*X
,而
X
是某个整数)

  • 当你看一个标准寄存器表时(我在谷歌上发现了几个相同的,我假设它们是标准的),共有31个寄存器。因此,当您为
    X
    指定一个值时,是否意味着
    X
    的值被限制为4*
    X
    <31?(或者更多限制,因为0-31范围内的几个寄存器保留供系统使用?),或者这将是内存中的地址,而不是寄存器

  • 我知道如果我使用
    $t0-$t7
    我使用的是寄存器8-15,
    $s0-$s7
    使用的是寄存器17-23,但是
    $R0-$Rk
    在哪里(对于某些整数k 当你看一个标准寄存器表时(我在谷歌上发现了几个相同的,我假设它们是标准的),共有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位用于有符号16位偏移量(
    i
    )。此偏移量被视为相对于下一台PC的指令计数-因此,您可以在每个方向上跳至64 KB


    我知道如果我使用
    $t0-$t7
    我使用的是寄存器8-15,
    $s0-$s7
    使用的是寄存器17-23,但是
    $R0-$Rk
    (对于一些整数通力,我想到了更多的问题。当取指令时,即当使用操作码时,对吗?修订*:当取指令时,即当操作码加载到指令寄存器时,对吗?