【问题标题】:Difference between "addi" and "add" for pseudoinstruction "move" in MIPS?MIPS中伪指令“move”的“addi”和“add”之间的区别?
【发布时间】:2015-09-14 03:06:54
【问题描述】:

对于这个伪指令:

move $rt, $rs

addi 和 add 汇编代码都可以接受吗?那么我可以使用任何一个

add $rt, $rs, $0

addi $rt, $rs, $0

?

编辑: 我想我在addi 上犯了一个错误

add $rt, $rs, $0

将与

相同

addi $rt, $rs, 0

因为add 添加了寄存器,所以我需要一个常量作为addi 的立即数

【问题讨论】:

    标签: assembly add mips move


    【解决方案1】:

    addi 指令需要 立即数 操作数而不是寄存器,因此 $0 实际上是 0

    add   $rt, $rs, $0
    addi  $rt, $rs, 0
    

    两者都将工作并将所有需要的信息编码到指令本身中):

    add   $d, $s, $t
        0000 00ss ssst tttt dddd d000 0010 0000
    addi  $t, $s, i
        0010 00ss ssst tttt iiii iiii iiii iiii
    

    但是,在这种特殊情况下,只使用零锁定的$0 寄存器会更通常,因为这毕竟是它的目的。

    不过,我也倾向于使用无符号变体,因为我似乎记得可能对有符号指令进行了额外的溢出检查:

    addu  $rt, $rs, $0
    

    【讨论】:

    • 谢谢,是的,我是这么认为的。正如你回答的那样,我编辑了我的问题以反映这一点,但我现在明白了。
    • 使用一条指令而不是另一条指令有什么性能优势吗?
    猜你喜欢
    • 2013-02-23
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2013-11-18
    • 2010-10-09
    相关资源
    最近更新 更多