Pular para o conteúdo

Exercício 7

Consolidar o aprendizado da linguagem Assembly RISC-V e compreender como as instruções de suporte a procedimentos são executadas. A seguinte expressão em C é implementada como uma chamada de procedimento usando jal e jr ra:

int f = (g + h) - (i + j);
  1. Abra o simulador de linguagem RISC-V.
  2. No editor de texto do simulador, transcreva o código abaixo:
# Exercício 07
# C expression: int f = (g + h) - (i + j);
.text
j main
leaf_example:
add a5, a1, a2 # a5 = g + h
add a6, a3, a4 # a6 = i + j
sub a0, a5, a6 # f = (g + h) - (i + j), resultado em a0
jr ra # retorna para o chamador
main:
addi a1, zero, 4 # g = 4
addi a2, zero, 7 # h = 7
addi a3, zero, 2 # i = 2
addi a4, zero, 1 # j = 1
jal leaf_example # chama a função
nop # a0 agora tem o valor de retorno (f)

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.
Antes Após executar a instrução
PC Instruction Pseudoinstrução x10x11x12x13x14x15x16x1
(a0 (f))(a1 (g))(a2 (h))(a3 (i))(a4 (j))(a5)(a6)(ra)
0x000000000x000000000x000000000x000000000x000000000x000000000x000000000x00000000
0x00400000 jal x0 20 j main

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