Skip to content

Laboratório 9

Objetivo

Nesta atividade, você deve escrever um programa em linguagem de montagem RISC-V que receba um número via STDIN, percorra uma lista ligada e imprima o índice do nó onde a soma dos três valores armazenados seja igual ao número lido do STDIN. Caso nenhum dos nós na lista ligada atenda a esse requisito, o número -1 deve ser impresso.

img

Para a lista ligada acima, caso a entrada fosse 159, o número 1 (índice do segundo nó na lista) deveria ser impresso, pois 56 + 78 + 25 = 159. Se a entrada fosse um número que não é igual à soma de nenhum dos nós (por exemplo, 8), -1 deveria ser impresso.

Entrada

Um número decimal codificado em ASCII no intervalo de -10000 a 10000.

Saída

Índice do nó onde a soma dos dois valores armazenados é igual ao valor recebido, se existir na lista encadeada; -1 se não existir

.Data

Copie o código a seguir em um arquivo nomeado data.s

.globl head_node

.data
head_node: 
    .word 10
    .word -4
    .word -2
    .word node_1
.skip 10
node_1: 
    .word 56
    .word 78
    .word 25
    .word node_2
.skip 5
node_3:
    .word -100
    .word -43
    .word -201
    .word 0
node_2:
    .word -654
    .word 590
    .word 1277
    .word node_3

Tip

Para realizar testes manuais envie o arquivo data.s junto com sua solção para o simuladore ALE

Input Output
4 0
Input Output
45 -1
Input Output
-344 3

Dicas

  • O nó inicial da lista encadeada está armazenado no endereço marcado pelo rótulo head_node (NÃO use este rótulo no seu código).
  • Os campos da estrutura do nó da lista encadeada são VAL1, VAL2, VAL3 e NEXT, nesta ordem.
  • VAL1, VAL2 e VAL3 são valores inteiros com sinal de 32 bits armazenados no nó e NEXT é o ponteiro para o próximo nó na lista encadeada. Se não houver um próximo nó, será um ponteiro NULL.
  • Para passar para o próximo valor da lista encadeada basta carregar o ponteiro NEXT no registradror desejado
  • Para verificar se o valor recebido está no nó atual, deve-se fazer a comparação VAL1 + VAL2 + VAL3 = valor recebido.
  • Um ponteiro NULL é representado pelo valor 0.
  • A indexação dos nós da lista começa em 0 (ou seja, o head_node tem índice 0).
  • Todos os nós terão valores de soma diferentes.
  • Para testar manualmente o data.s disponibilizado no classroom pode ser carregado junto com o arquivo.s feito

Entrega

O código deve ser testado no seguinte link o report gerado deve ser submetido no Classroom com o nome de {SeuRA}_lab9.report

Warning

Esta é uma atividade que deve ser realizada programando-se em linguagem de montagem - A submissão de programas em linguagem de programação de alto nível, como C, ou de programas gerados por ferramentas de compilação, serão considerados como fraude