Pular para o conteúdo

Exercício 3

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;
  1. Abra o simulador de linguagem RISC-V.
  2. 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;
.text
main:
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 - i

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.
Antes Após executar a instrução
PC Instruction x8x9x18x19x20
(s0)(s1)(s2)(s3)(s4)
0x000000000x000000000x000000000x000000000x00000000
0x00400000 addi s0 zero 15 0x0000000F

Dica: no diálogo de impressão, selecione o tamanho A2 para melhor resultado.

Agora altere a instrução addi que define s4 para atribuir j = 1 (igual a i):

addi s4, zero, 1 # j = 1

Clique 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.
Antes Após executar a instrução
PC Instruction x8x9x18x19x20
(s0)(s1)(s2)(s3)(s4)
0x000000000x000000000x000000000x000000000x00000000
0x00400000 addi s0 zero 15 0x0000000F

Dica: no diálogo de impressão, selecione o tamanho A2 para melhor resultado.

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.