Assembly 在MIPS体系结构中,有没有办法将三个寄存器添加到一行cod中?

Assembly 在MIPS体系结构中,有没有办法将三个寄存器添加到一行cod中?,assembly,mips,computer-science,cpu-architecture,mars-simulator,Assembly,Mips,Computer Science,Cpu Architecture,Mars Simulator,很明显,大多数add指令的语法为add$t0、$t1、$t2;将t1和t2相加并存储在t0中。但是,是否可以将三个寄存器添加到一起,并将其存储在一行代码中?前任;t0=t1+t2+t3?否。类似的每个源都必须对应于一条机器指令(或汇编程序为您扩展的伪指令) 表达式中有两个+操作,MIPS没有三输入加法指令。通常的方法是使用两种说明,如下所示: addu $t0, $t1, $t2 # t0 = t1 + t2 addu $t0, $t0, $t3 # t0 +

很明显,大多数add指令的语法为add$t0、$t1、$t2;将t1和t2相加并存储在t0中。但是,是否可以将三个寄存器添加到一起,并将其存储在一行代码中?前任;t0=t1+t2+t3?

否。类似的每个源都必须对应于一条机器指令(或汇编程序为您扩展的伪指令)

表达式中有两个
+
操作,MIPS没有三输入加法指令。通常的方法是使用两种说明,如下所示:

    addu   $t0, $t1, $t2    # t0 = t1 + t2
    addu   $t0, $t0, $t3    # t0 += t3
汇编语言不像高级语言;它不会被编译,只会被组装成机器代码在asm语法中可以执行的操作受到机器代码可以为该ISA(在您的例子中是MIPS)的单个指令编码的限制



从理论上讲,您可以使用一个汇编器,该汇编器允许类似于
addu-dst、src1、src2、src3、
的语法,并将其扩展为多条
addu
机器指令(例如如何将
li$v0、0x12345678
汇编到
lui
/
addu
)。但是AFAIK没有MIPS汇编程序能做到这一点。

没有。像这样的每个源代码都必须对应于一条机器指令(或者汇编程序为您扩展的伪指令)

表达式中有两个
+
操作,MIPS没有三输入加法指令。通常的方法是使用两种说明,如下所示:

    addu   $t0, $t1, $t2    # t0 = t1 + t2
    addu   $t0, $t0, $t3    # t0 += t3
汇编语言不像高级语言;它不会被编译,只会被组装成机器代码在asm语法中可以执行的操作受到机器代码可以为该ISA(在您的例子中是MIPS)的单个指令编码的限制



从理论上讲,您可以使用一个汇编器,该汇编器允许类似于
addu-dst、src1、src2、src3、
的语法,并将其扩展为多条
addu
机器指令(例如如何将
li$v0、0x12345678
汇编到
lui
/
addu
)。但恐怕没有MIPS汇编程序能做到这一点。

如果我能做到的话$t0=$t1+$t2+$t3,我必须将$t1+$t2存储在另一个寄存器中,并将其添加到$t3,最后将其存储在$t0中?“添加$t4、$t1、$t2”然后“添加$t0、$t4、$t3”@iYahoOu:您可以这样做,但不需要使用单独的临时值,只需对
t1+t2
中间结果使用
$t0
。Asm指令在写入其输出之前读取其输入,因此在同一指令中使用同一寄存器作为源和目标是可以的。更新了我的答案。您还可以查看编译器的功能,例如在上。使用
-O2
或至少
-Og
这样编译器就不会将所有内容都存储到内存中$t0=$t1+$t2+$t3,我必须将$t1+$t2存储在另一个寄存器中,并将其添加到$t3,最后将其存储在$t0中?“添加$t4、$t1、$t2”然后“添加$t0、$t4、$t3”@iYahoOu:您可以这样做,但不需要使用单独的临时值,只需对
t1+t2
中间结果使用
$t0
。Asm指令在写入其输出之前读取其输入,因此在同一指令中使用同一寄存器作为源和目标是可以的。更新了我的答案。您还可以查看编译器的功能,例如在上。使用
-O2
或至少使用
-Og
这样编译器就不会将所有内容都存储到内存中;添加$t0、$t0、$t3。这是仅有的两条指令的行。请参阅-,它以两页的形式列出了MIPS的所有指令。加法有几种,R型和I型。如果你想做的事情不在这张纸上,你必须用它所拥有的东西把它分成几个指令;添加$t0、$t0、$t3。这是仅有的两条指令的行。请参阅-,它以两页的形式列出了MIPS的所有指令。加法有几种,R型和I型。如果你想做的事情不在这张纸上,你必须用它的内容把它分成几个指令。