Instrução MIPS: lw (carregar palavra)

é lw $s0,8($0) o mesmo que lw $s0,0($v0)?

não vejo a diferença. Eu acho que o 8 representa o offset, o que significa que precisamos dos addres de $0 e adicionar 2 (8/4) para o endereço.

editar:

A minha pergunta é sobre a instrução lw e o conjunto de registos MIPS. É muito difícil para mim entender como a compensação funciona exatamente...

Author: ErebosM, 2015-07-22

1 answers

[16]Eles não são os mesmos, embora em algumas circunstâncias eles se comportarão da mesma forma. O formato da instrução lw é o seguinte:
lw RegDest, Offset(RegSource)
Onde o RegDest e o RegSource são registos MIPS, e o Offset é imediato. Significa, introduzir no registo RegDest a palavra contida no endereço resultante da adição do conteúdo do registo RegSource e da compensação especificada. O endereço de origem resultante deve ser alinhado com as palavras (ou seja, múltiplo de 4)

Portanto, lw $s0,8($0) significa carregar em $s0 o conteúdo da palavra localizado no endereço indicado por $0 mais 8. Como $0 é o registo $zero que irá sempre conter o zero constante, irá carregar a palavra localizada no endereço absoluto 8 em $s0.

lw $s0,0($v0) meios para carregar em $s0 o conteúdo da palavra localizado no endereço especificado por $v0. Se $v0 contém o valor 8 então ambas as instruções têm o mesmo efeito. Se $v0 não for um múltiplo de 4, o a instrução irá gerar uma Armadilha de endereçamento.

Geralmente lw é uma pseudoinstrução no sentido de que o montador pode emmit mais de uma instrução para realizar a instrução. O deslocamento (deslocamento) tem que ser um valor assinado de 16 bits. Se a sua instrução tem um imediato com mais bits, o montador usualmente usa um registro temporário ($at) para manter o conteúdo do imediato e, em seguida, emmit instruções equivalentes para realizar o comportamento pretendido. Pode ver isto. in action using a dissassembler or a MIPS monitor (also inspecting the code with MARS simulator).

 7
Author: gusbro, 2015-07-22 16:15:26