Exercício 8
Objetivo
Seção intitulada “Objetivo”Consolidar o aprendizado da linguagem Assembly RISC-V e compreender como a pilha é utilizada para preservar registradores entre chamadas de procedimento. A mesma expressão em C do Exercício 7 é usada, mas agora leaf_example salva e restaura os registradores t0, t1 e s0 na pilha:
int f = (g + h) - (i + j);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 08# C expression: int f = (g + h) - (i + j);
.text j main
leaf_example: addi sp, sp, -12 # ajusta a pilha para 3 registradores sw t1, 8(sp) # salva t1 sw t0, 4(sp) # salva t0 sw s0, 0(sp) # salva s0
add t0, a1, a2 # t0 = g + h add t1, a3, a4 # t1 = i + j sub s0, t0, t1 # f = t0 - t1 add a0, s0, zero # retorno em a0
lw s0, 0(sp) # restaura s0 lw t0, 4(sp) # restaura t0 lw t1, 8(sp) # restaura t1 addi sp, sp, 12 # libera espaço na pilha jr ra # retorna da função
main: addi t1, zero, 1 addi t0, zero, 2 addi s0, zero, 3
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 leaf_example nop # resultado em a0Execução Passo a Passo
Seção intitulada “Execução Passo a Passo”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 ou posição da memória 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.