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.
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
eNEXT
, nesta ordem. VAL1
,VAL2
eVAL3
são valores inteiros com sinal de 32 bits armazenados no nó eNEXT
é o ponteiro para o próximo nó na lista encadeada. Se não houver um próximo nó, será um ponteiroNULL
.- 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 valor0
. - 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 oarquivo.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