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
1 answers
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