Exercício 4
Objetivo
Seção intitulada “Objetivo”Consolidar o uso de desvios condicionais e incondicionais em Assembly RISC-V por meio de um comando if-else com bne e j. A seguinte expressão em C é traduzida para assembly usando bne e j:
if (i == j) f = g + h;else f = g - h;Instruções
Seção intitulada “Instruções”- Abra o simulador de linguagem RISC-V.
- No editor de texto do simulador, transcreva o código abaixo:
# Exercício 04# C expression:# if (i == j)# f = g + h;# else# f = g - h;
.textmain: addi s1, zero, 10 # g = 10 addi s2, zero, 20 # h = 20 addi s3, zero, 1 # i = 1 addi s4, zero, 2 # j = 2
bne s3, s4, Else # if (i != j) goto Else add s0, s1, s2 # f = g + h j Exit # goto Exit
Else: sub s0, s1, s2 # f = g - h
Exit: nopExecução Passo a Passo - Cenário 1 (i ≠ j)
Seção intitulada “Execução Passo a Passo - Cenário 1 (i ≠ j)”Com os valores iniciais i = 1 e j = 2, o desvio é tomado e a execução salta para Else, calculando f = g - h.
Execute o programa passo a passo clicando no botão Run One Step. A cada instrução, preencha a tabela abaixo cada vez que o valor de um registrador for modificado.
Preencha a tabela abaixo
- Preencha o PC com o endereço da instrução e copie a coluna Instrução com o conteúdo da coluna Source do simulador. Preencha apenas os campos que forem modificados.
- Para pseudo-instruções, o simulador exibe a instrução real na coluna Basic e a forma original na coluna Source. Copie o valor Basic na coluna Instrução e o valor Source na coluna Pseudoinstrução. Deixe a coluna de pseudoinstrução em branco para instruções reais.
- Se precisar de mais linhas, clique em Adicionar linha. A verificação só é realizada quando todas as linhas estiverem preenchidas, se nada aparecer ao clicar em Verificar, significa que ainda há linhas em branco.
Execução Passo a Passo - Cenário 2 (i = j)
Seção intitulada “Execução Passo a Passo - Cenário 2 (i = j)”Agora altere a instrução addi que define s4 para atribuir j = 1 (igual a i):
addi s4, zero, 1 # j = 1Clique em Reset para recarregar o programa e execute passo a passo novamente. Com i = j = 1, o desvio não é tomado e a execução continua normalmente para o add, em seguida salta para Exit via j, ignorando Else.
Preencha a tabela abaixo
- Preencha o PC com o endereço da instrução e copie a coluna Instrução com o conteúdo da coluna Source do simulador. Preencha apenas os campos que forem modificados.
- Para pseudo-instruções, o simulador exibe a instrução real na coluna Basic e a forma original na coluna Source. Copie o valor Basic na coluna Instrução e o valor Source na coluna Pseudoinstrução. Deixe a coluna de pseudoinstrução em branco para instruções reais.
- Se precisar de mais linhas, clique em Adicionar linha. A verificação só é realizada quando todas as linhas estiverem preenchidas, se nada aparecer ao clicar em Verificar, significa que ainda há linhas em branco.
Compare as duas tabelas e analise a diferença no fluxo de execução (observe a sequência de valores do PC) e o valor final de s0.