Diferença entre" add "e" add "para a pseudoinstrução" move " em MIPS?

para esta pseudoinstrução:

move $rt, $rs

o addi e o código de montagem são aceitáveis? Então eu poderia usar qualquer um

add $rt, $rs, $0

ou

addi $rt, $rs, $0

?

editar: Acho que cometi um erro com ... addi

add $rt, $rs, $0

seria o mesmo que

addi $rt, $rs, 0

uma vez que add adiciona registos, e eu preciso de uma constante para o imediato para addi

Author: izelkay, 2015-09-14

1 answers

A instrução addi requer um operandi imediato em vez de um registo, por isso o $0 seria realmente0:

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

Ambos irão trabalhar e ter toda a informação necessária codificada na própria instrução):

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

No entanto, seria mais habitual apenas usar o registo $0 Sem bloqueio neste caso particular, uma vez que esse é, afinal, o seu propósito.

Eu também tenderia a usar a variante SEM sinal, no entanto, uma vez que eu parece lembrar-se que pode haver uma verificação de transbordamento extra para as instruções assinadas:

addu  $rt, $rs, $0
 1
Author: paxdiablo, 2015-09-14 03:40:50