繁体   English   中英

MIPS使用不同的寄存器类型但相同的解决方案

[英]MIPS using different register types but same solution wise

我想知道你使用不同的寄存器有什么区别,如下面的代码:

这里正确的答案一直使用寄存器$v0

get_status:
        lui $t0,0xabab
        ori $t0, $t0, 0x0020

        lw $v0,0($t0)
        andi $v0,$v0,0x4
        srl $v0,$v0,2

        jr $ra

我使用$t1而不是$v0以上,请注意我有一个额外的sw

get_status:
        lui $t0,0xabab
        ori $t0, $t0, 0x0020

        lw $t1,0($t0)
        andi $t1,$t1,0x4
        srl $t1,$t1,2
        sw $t1, 0($t0)

        jr $ra

我认为两个代码的工作原理相同,你们认为是什么?

$v0$t1都是调用破坏的通用整数寄存器。 他们不是“不同类型”。

但是在标准的MIPS调用约定中, $v0 (有时是$v1 )是调用者期望找到整数返回值的地方。 这就是get_status$v0计算结果的原因。

我认为两个代码的工作原理相同,你们认为是什么?

您的代码修改了它加载的静态存储! 它不再是get_status了。

它是void update_status(void)int update_status(void) ,具有非标准调用约定(在$t1返回)。


这效率很低:

lui ...
ori $t0, $t0, 0x0020
lw  $v0,0($t0)

使用lw的立即偏移空间来保存静态地址的低16位。 (它是符号扩展,而ori零扩展它的立即,但在这种情况下,你不需要调整lui因为偏移是正面的。)

lui ...
lw  $v0, 0x0020($t0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM