Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso: Bacharel em Sistemas de Informação Turma: BSI2 Disciplina: Arq. e Organização de Computadores CH: 60 horas Período: 2012/2 Professor: Flávio Giraldeli Fatoração em C e Assembly OBJETIVO Implementar um pequeno programa que faça a fatoração de um número natural N ≥ 2. Ou seja, dado N, o programa deverá exibir a sua decomposição em fatores primos. Para tanto, deverão ser usadas as linguagens Assembly x86 (16 bits) e C. Após a implementação em alto e baixo nível, uma análise comparativa deverá ser feita a fim de evidenciar os detalhes de Arquitetura de Computadores que são ocultados pela linguagem de alto nível, C. GRUPOS Deverão ser formados grupos com 3 alunos, a serem escolhidos livremente (contando que pelo menos um domine os aspectos básicos de programação em C). No caso do número de alunos da turma não ser múltiplo de 3, a decisão deverá ficar a critério do professor. PONTUAÇÃO O referido trabalho será avaliado de 0 a 100 e corresponderá a 25% da nota semestral. A nota do trabalho será calculada da seguinte forma: Não serão admitidos, em hipótese alguma, trechos de código comuns ou semelhantes entre grupos. Isto será rigorosamente observado. Assim sendo, evitem a “cooperação” entre os grupos. A mesma observação vale “pesquisas na internet”. Lembre-se, o professor também sabe fazer essas pesquisas. DA IMPLEMENTAÇÃO Em ambas as implementações, o comportamento do programa executável deverá ser indistinto, ou seja, em execução, ambos têm que se comportar exatamente da mesma forma do ponto de vista do usuário. Será solicitado ao usuário que digite um número natural N ≥ 2 e o programa deverá encontrar e exibir (de maneira compacta) os fatores primos que compõem o número. Guie-se pelo exemplo abaixo (onde o circunflexo ‘^’ indica potência): Digite N: 2520 2520 = 2^3 x 3^2 x 5 x 7 Se você não souber nem por onde começar a desenvolver o algoritmo, sugiro que preste atenção à forma como fazemos a fatoração “na mão”, como aprendemos no ensino fundamental, lembra? 2520 2 1260 2 630 2 315 3 105 3 35 5 7 7 1 2 3 x 3 2 x 5 x 7 Lembre-se que estamos lidando com um processador de 16 bits. Portanto há um limite máximo para o número a ser entrado. A essa altura você deve ser capaz de descobrir o máximo valor inteiro possível de ser representado em 16 bits e se vai lidar com sinal ou não. O grupo poderá criar cada algoritmo da forma que julgar melhor (lembre-se de, se necessário, justificar/explicar as decisões tomadas no relatório). No entanto, uma obrigatoriedade lhes será imposta no que diz respeito à modularização do algoritmo: Algoritmo em C: Deverá ser criada uma função, cujo protótipo será int ehPrimo(int n); que, dado um número natural n ≥ 2 retorne 1, indicando que o número é primo ou 0 caso contrário. Essa função deverá ser chamada ao se buscar cada um dos fatores primos que compõem o número N digitado pelo usuário. Algoritmo em Assembly: Deverá ser criado um procedimento em Assembly cuja funcionalidade é análoga à função em C acima descrita. No entanto, o grupo deverá pensar na forma mais apropriada de se passar o parâmetro e de se retornar o resultado, de acordo com o que fora visto nas aulas de Assembly, já que em baixo nível as coisas não são tão simples. Fica a cargo do grupo criar (ou não) outras funções (C) ou procedimentos (Assembly) que julgar necessários. Porém a única obrigatoriedade é a descrita acima, uma vez que envolve importantes aspectos de arquitetura de computadores. A implementação em C poderá ser feita no compilador que o grupo desejar (ou que já esteja acostumado a usar). Ou, se quiser uma dica, pode começar a usar uma IDE profissional como o Microsoft Visual Studio 2012 Express para Windows Desktop (Gratuito). (Link: http://www.microsoft.com/visualstudio/ptb/downloads#d-2012-express) Já a implementação em Assembly deverá fazer uso do emu8086, enviado por email. O formato do arquivo Assembly poderá ser um .com, cuja estrutura “mono-segmento” é bem mais simples que um .exe. Nenhum procedimento/macro pré-pronto poderá ser chamado diretamente. No entanto, você poderá abrir o arquivo inc\emu8086.inc e copiar uma ou outra rotina básica e inserir diretamente no seu código. As rotinas (macro/procedimento) deverão ser traduzidas e plenamente compreendidas pelo grupo. A qualidade da sua implementação, usando corretamente os recursos aprendidos (como chamadas a procedimento, macros, uso da pilha, saltos, variáveis, etc...) será avaliado. Faça uso extensivo do emulador. Lembre-se que o objetivo primário é o aprendizado de AOC, e não a programação em Assembly. O emulador possui simulação passo a passo da execução, sendo possível visualizar todas as informações de estado (registradores, memória, pilha, variáveis, etc...) em tempo real. DO RELATÓRIO É necessária a confecção de um relatório escrito do trabalho, correspondendo a 40% da nota, conforme o tópico anterior. Apesar de haver certo grau de liberdade na elaboração do relatório escrito, os seguintes tópicos devem ser abordados: Todos os aspectos da linguagem de baixo nível que a implementação em C simplesmente “oculta”, ou seja, você sequer precisa saber que aquilo existe em Assembly ao implementar em C. Dê exemplos. Comparação da quantidade de instruções relevantes presentes em C/Assembly; Explicação do funcionamento básico de todas os macros/procedimentos que foram copiados do inc\emu8086.inc. Avaliação do grupo do tempo necessário para cada implementação. Tome a implementação em C como referência e estime o percentual de tempo a mais necessário para a implementação em Assembly. Conclusão, incluindo uma auto avaliação do aprendizado adquirido; DA ENTREGA A data limite para entrega do trabalho, via email do professor, é o dia 05/04 até as 23:59. Tal prazo é necessário para que dê tempo de corrigir todos os trabalhos e entregar as notas parciais a tempo da prova final, marcada para o dia 09/04. Instruções para envio do email com o trabalho: Assunto: [AOC – 2012-2] Trabalho 2 - Aluno1, Aluno2, Aluno3 Anexo: Pacote compactado (zip/rar) com o mesmo nome usado no campo assunto e contendo: Implementação em C num arquivo .c único (fatoracao.c); Implementação em Assembly num arquivo .asm (fatoracao.asm); Relatório em formato PDF conforme recomendações acima citadas (relatorio.pdf). Siga estritamente as regras acima, ou seu trabalho poderá ser desclassificado. Principalmente as normas de nomenclatura. TURMA... É SÉRIO! SEREI MUITO RÍGIDO QUANDO A ISSO! O objetivo é facilitar a correção/análise por parte do professor. Bom Trabalho!
Compartilhar