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.
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