Buscar

[OAC] Trabalho Assembly

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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!

Outros materiais