O que significa lw e bne nesta situação?

sou muito novo na programação e eu estava me perguntando o que lw (ambas as vezes) e bne estão fazendo exatamente nesta pergunta? Peço desculpa por quaisquer erros na pergunta Porque tive de traduzi-lo para Inglês.

aqui começa a Pergunta:

parte da memória de dados contém os seguintes valores:

endereço-valor

100-1

104-2

108-4

112-8

116-16

Dado o código abaixo, qual será o valor do registo r1 após a execução deste código?

addi    r2,r0,104
lw  r1,-4(r2)
addi    r3,r0,116
label:  addi    r2,r2,4
lw  r4,-4(r2)
add r4,r4,r4
add r1,r4,r1
bne r2,r3,label
Author: James K Polk, 2015-10-25

1 answers

Como disse o Michael, ler as instruções e colocar comentários depois de cada linha irá ajudá-lo a entender o código.
addi    r2,r0,104       ;r2 = 0d104
lw      r1,-4(r2)       ;r1 = (0d100)
addi    r3,r0,116       ;r3 = 0d116
label:addi    r2,r2,4   ;r2 += 4
lw      r4,-4(r2)       ;r4 = (r2-4)
add     r4,r4,r4        ;r4 *= 2
add     r1,r4,r1        ;r1 += r4
bne     r2,r3,label     ;if(r2 ≠ r3), branch to label
nop

LW significa carregar a palavra . Ele carrega uma palavra em um registro a partir do endereço especificado.

BNE significaramo em não igual . Executa a instrução que a segue sem atrasos (e é por isso que eu adicionei um nop após o seu código), e branch para o endereço especificado se os dois registros submetidos como parâmetros não são iguais.

Então o que acontece é que r1 é inicializado com o valor em (0d100), ou seja, 1. Então r3 está definido para 0d116.

O R2 é aumentado em 4, o r4 é igual ao valor em (0d104), é multiplicado por 2 e depois é adicionado ao r1. Ele então faz loops até r2 = 0d116, o que significa que o valor em 0d116 nunca será lido.

R1 = 1 + 2×2 + 4×2 + 8×2 = 29

 0
Author: Méga Lag, 2015-10-26 04:46:37