O objetivo deste trabalho é implementar funções para soma, subtração e conversão de números em notação ponto flutuante IEEE 754 precisão simples, ou seja, o tipo float do C. Essas funções devem ser implementadas manipulando-se somente a representação binária dos números, sem o uso das instruções e registradores do co-processador de ponto flutuante.
O trabalho deve ser desenvolvido em assembler. As funções devem seguir os seguintes protótipos:
/* Retorna a+b */ unsigned int addf (float a, float b); /* Retorna a-b */ unsigned int subf (float a, float b); /* converte de formato float para int */ int f2i (float a); /* converte de formato int para float */ unsigned int i2f (int a);
As funções devem retornar seus resultados sempre em %eax
;
por isso, mesmo as funções que retornam números em ponto flutuante têm
o tipo de retorno declarado como unsigned int
.
Esse unsigned int
é sempre a representação
de um número float
.
Todas as funções devem tratar corretamente (quando possível)
todas os casos do padrão IEEE 754 (+/- inf, NaN, números denormalizados).
O produto deste trabalho deve ser um arquivo em assembler com nome "trab2.s" definindo apenas as quatro funções acima.
O prazo de entrega é dia 21/11. Os trabalhos perderão um ponto por cada dia de atraso.
Os trabalhos podem ser feitos em grupos de até dois alunos. Caso alunos de turmas diferentes queiram formar um grupo, isso deve ser avisado aos dois professores com antecedência mínima de 15 dias da entrega dos trabalhos.
Os alunos poderão ser chamados para apresentações orais do trabalho.
Os trabalhos deverão ser entregues por email para o professor da turma e em papel (no escaninho do professor da turma). O email deverá ter como anexo um unico arquivo, o fonte do seu programa. Na documentação impressa, faça um pequeno relatório explicando o que está funcionando e, principalmente, o que não está funcionando. (Se o programa tiver bugs, você saber disso é sempre um atenuante.) Os conteúdos do email e da listagem impressa devem ser rigorosamente iguais.
Coloque no início do arquivo fonte um comentário com os nomes dos integrantes do grupo, na forma abaixo:
/* Nome_do_Aluno1 Matricula1 */ /* Nome_do_Aluno2 Matricula2 */
A pontuação é por função correta. Implemente uma função de cada vez, e teste bem sua implementação. É melhor entregar um tabalho com apenas algumas funções funcionando corretamente do que com todas as funções funcionando incorretamente.
Se você não implementar alguma das funções,
crie uma dummy com o nome da função que faltou e corpo equivalente
a { return 0; }
.
Casos de cola serão punidos com nota zero para todos os alunos integrantes dos grupos envolvidos.