Exercício 3
Objetivo
Seção intitulada “Objetivo”Consolidar o uso da instrução de desvio condicional em RISC-V. A seguinte expressão em C é traduzida para assembly usando beq:
if (i != j) f = g + h;f = f - i;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 03# C expression:# if (i != j)# f = g + h;# f = f - i;
.textmain: addi s0, zero, 15 # f = 15 addi s1, zero, 10 # g = 10 addi s2, zero, 20 # h = 20 addi s3, zero, 1 # i = 1 addi s4, zero, 2 # j = 2
beq s3, s4, L1 # if (i == j) goto L1 add s0, s1, s2 # f = g + h
L1: sub s0, s0, s3 # f = f - iExecuçã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 não é tomado e todas as instruções são executadas.
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.
- 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 é tomado e a instrução add é ignorada.
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.
- 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.