Skip to content

Laboratório 9 - 🔗 Lista Encadeada com ABI

📝 Descrição - Peso 2

Nesta atividade, você deve escrever um programa em linguagem assembly RISC-V que tenha uma função compatível com ABI chamada int linked_list_search(Node *head_node, int val). Seu código será vinculado a um código em C que chama a função linked_list_search e espera que o valor de retorno seja o índice do nó onde a soma dos valores é igual a val ou -1 caso não haja tal nó na lista encadeada.

img

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

Além de linked_list_search, você precisará implementar algumas funções utilitárias que serão necessárias para este exercício e para futuros. Não é necessário lidar com erros nem com o fim do arquivo (EOF).

Funções

  • void puts ( const char * str );
Descrição Parâmetros Valor de Retorno
puts - Referência C++ String terminada por \0 -
  • char * gets ( char * str );
Descrição Parâmetros Valor de Retorno
gets - Referência C++ Buffer a ser preenchido Consulte a documentação da função
  • int atoi (const char * str);
Descrição Parâmetros Valor de Retorno
atoi - Referência C++ String terminada por \0 Inteiro representado pela string
  • char * itoa ( int value, char * str, int base );
Descrição Parâmetros Valor de Retorno
itoa - Referência C++ Consulte a documentação da função. Apenas bases 10 e 16 serão testadas. Os testes não distinguirão maiúsculas de minúsculas. -
  • void exit(int code);
Descrição Parâmetros Valor de Retorno
Chama a syscall exit para finalizar a execução. Código de retorno (geralmente usado como código de erro). -

lib.h

typedef struct Node {
    int val1, val2;
    struct Node *next;
} Node;

int linked_list_search(Node *head_node, int val);
void puts ( const char *str );
char *gets ( char *str );
int atoi (const char *str);
char *itoa ( int value, char *str, int base );
void exit(int code);

Entrada

Número do caso de teste e entrada específica dependendo do caso de teste verifique example.c.

🕹️ Saída

Saída conforme o caso de teste.

💡 Notas e Dicas

  • A função linked_list_search receberá o endereço do nó inicial no registrador a0 e o valor procurado no registrador a1, e deverá retornar no registrador a0 o índice do nó, se encontrado, ou - 1 caso contrário.
  • Os campos da estrutura do nó da lista encadeada são VAL1, VAL2 e NEXT, nesta ordem. VAL1 e VAL2 são os valores inteiros com sinal armazenados no nó, e NEXT é o ponteiro para o próximo nó na lista encadeada. Se não houver próximo nó, ele será um ponteiro NULL.
  • Para verificar se o valor recebido está no nó atual, deve ser feita a comparação VAL1 + VAL2 = 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), e a lista encadeada terá até 1000 nós nos casos de teste.
  • Todos os nós terão valores de soma diferentes.
  • Os símbolos devem ser definidos como globais (diretiva .globl) para que o linker resolva referências não definidas.
  • O caractere \0 corresponde ao byte nulo, que tem o valor 0. No entanto, usar li a0, '\0' pode levar a erros porque o montador interpreta o valor como o caractere '0' (que tem um valor ASCII de 48) em vez do byte nulo.
  • Você pode testar seu código usando o assistente do simulador a partir deste link.

Lembre-se de entregar seu .report para no classroom com o nome raXXXXX.report.

Warning

  • Qualquer alteração no arquivo de report será considerado fraude
  • 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
  • Está é uma atividade individual, o qual deve ser desenvolvido individualmente, qualquer forma de cópia ou plágio será penalizada. Portanto, atividades que apresentarem semelhanças injustificadas serão atribuídas nota zero para todos os envolvidos