INF1600/INF1612 - Software Básico - 99.2

1o Trabalho

  1. (3 pontos) Escreva uma função para localizar uma sub-string dentro de uma string. A função deverá receber o endereço das duas strings em $a0 e $a1, e retornar seu resultado em $v0. Se a string $a1 estiver contida na string $a0, a função deve retornar o endereço de onde esta ocorrência começa (isto é, um endereço para dentro da string $a0, onde encontramos $a1). Caso a string $a1 não esteja contida em $a0, a função deve retornar 0 (zero). (Qualquer dúvida, vide a documentação da função strstr da biblioteca padrão de C.)
  2. (7 pontos) Escreva uma função para multiplicar dois números em ponto flutuante, sem utilizar o co-processador aritmético. A função deve receber os dois números nos registradores $a0 e $a1, representados no formato IEEE float (32 bits), e retornar o produto dos dois números (no mesmo formato) no registrador $v0. Sua função deve tratar números positivos e negativos, e todos os casos particulares da representação IEEE (zero, infinito, "not a number", e números não normalizados).

    Note que você não deve usar a pseudo-instrução mul para multiplicar as mantissas. Como cada mantissa tem 24 bits, o produto tem 48 bits, e portanto não cabe em um único registrador. Use a operação mult, que deixa o resultado em dois registradores.

O trabalho deverá ser feito em grupo de no máximo 2 (dois) alunos.

A entrega deverá ser feita até o dia 25/11.

Trabalhos fora do prazo perderão meio ponto por dia de atraso.

Os trabalhos deverão ser entregues em disquete (um arquivo para cada item do trabalho, chamados item1.asm e item2.asm) e em listagem.

Para cada função pedida, escreva também um "programa" main que permita testarmos a função; esse programa deverá repetidamente pedir os parâmetros na console, chamar a função com os parâmetros dados e mostrar o resultado final.

Separe bem a função pedida da função main. As funções devem respeitar os protocolos de chamada de funções. Em particular, não devem sujar outros registradores que não os temporários ($t0, etc.). Também não devem acessar nenhuma variável global. Toda a comunicação delas com o resto do mundo (e com a main) deve ser apenas através dos parâmetros e valor de retorno.

Se necessário, simplifique o problema (por exemplo não tratando alguns casos especiais), mas entregue um trabalho que faça algo. É muito melhor um programa que faça corretamente uma parte do que foi pedido do que um programa que quase faça tudo perfeitamente, mas que na realidade não faça nada.

Qualquer dúvida não invente, consulte-nos!.