Skip to content

Laboratório 8 - Ordenação de Vetores em Ponto-Fixo

Objetivo

Implementar rotinas de ordenação de elementos, controle de loops e manipulação de dados em ponto-fixo em Assembly RISC-V.

Motivação

A ordenação de dados é uma das operações fundamentais mais recorrentes em ciência da computação. Implementar um algoritmo de ordenação (como Insertion Sort ou Bubble Sort) diretamente em Assembly exige traduzir lógica iterativa de alto nível em operações de baixo nível e gerenciar acessos sequenciais à memória.

O desafio consiste em receber uma sequência de números fracionários representados em texto, convertê-los para o formato binário interno, realizar a ordenação eficiente e reformatar a saída mantendo o padrão visual exigido.

Notação de Ponto-Fixo

Em processadores RISC-V sem as extensões de hardware F ou D (ponto flutuante), o uso da notação de ponto fixo é uma alternativa eficiente para manipular valores fracionários. Adotando a representação em complemento de 2 no formato Q24.8 (1 bit de sinal, 23 bits para a parte inteira e 8 bits para a fracionária), o número real é escalado por 2^8 e tratado pelo processador como um inteiro comum de 32 bits, o que evita estouros de capacidade (overflow).

Nessa notação a soma e a subtração funcionam diretamente com instruções nativas de inteiro, pois os pontos binários já estão alinhados. Contudo, a multiplicação e a divisão exigem ajustes manuais de escala: a multiplicação duplica a escala e requer um deslocamento de 8 bits à direita (shift right) para retornar ao formato Q24.8, enquanto a divisão exige um deslocamento prévio de 8 bits à esquerda para preservar a precisão fracionária.

Entradas e Saídas

A entrada é uma única linha contendo vários números no formato "xxx.xxx" (com o sinal indicando se for negativo, contendo obrigatoriamente 3 dígitos na parte inteira e 3 dígitos na parte fracionária), separados por espaços simples até o fim da linha.

A saída é uma linha única contendo os mesmos elementos da entrada, porém organizados em ordem crescente, mantendo exatamente o mesmo formato de espaçamento e representação ("xxx.xxx").

Exemplos

Exemplo 1

005.500 -002.250 001.100 000.000 010.550
-002.250 000.000 001.100 005.500 010.550

Exemplo 2

-045.120 012.000 -003.450 099.999
-045.120 -003.450 012.000 099.999

Entrega

O report gerado pelo simulador deve ser submetido no Classroom da disciplina, renomeado para {RA}_lab8.report.

Warning

  • Qualquer alteração no arquivo de report será considerado fraude
  • O uso de ferramentas de IA deve ser reportado, indicando como foi utilizado e em quais partes do código.
  • 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