Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

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: 2013/1 
Professor: Flávio Giraldeli 
Validador de CPF em C e Assembly 
OBJETIVO 
Implementar um pequeno programa de validação de números de CPF usando a linguagem 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 20% 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. Para tanto, solicite, via mensagem 
de texto, o número do CPF a ser validado. Para facilitar, você pode entrar apenas com os caracteres numéricos. Após análise, 
informe se o número é válido ou não. Simples assim. 
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 verificaCPF(char *cpf); que, 
dado um vetor de chars (11 caracteres) representando o CPF, retorne 1 se o CPF for válido ou 0 caso contrário. Essa 
função deverá ser chamada após o algoritmo principal (no main) capturar o CPF 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. OBS: Lembre-se de implementar o backspace (quando você estiver programando você irá entender...). 
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 Express 2012 para Windows 
Desktop (Gratuito). (Link: http://www.microsoft.com/visualstudio/ptb/products/visual-studio-express-for-windows-desktop) 
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/09 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/09. 
Instruções para envio do email com o trabalho: 
Assunto: [AOC – 2013-1] 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 (cpf.c); 
 Implementação em Assembly num arquivo .asm (cpf.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. 
É SÉRIO! SEREI MUITO RÍGIDO QUANDO A ISSO E NÃO ACEITAREI RECLAMAÇÕES SOB HIPÓTESE ALGUMA! O objetivo é 
facilitar a correção/análise por parte do professor. 
O ALGORITMO DE VALIDAÇÃO DO CPF 
DESCRIÇÃO 
No Brasil existe o CPF (Cadastro de Pessoas Físicas) que serve para identificar cada indivíduo no país. O número do CPF é 
composto de 11 dígitos, sendo os dois últimos os dígitos de verificação. A fórmula para verificar a validade do número do CPF 
é simples e é explicada abaixo: 
Vamos tomar como exemplo o número 123.456.789-09 
1º DÍGITO VERIFICADOR 
Primeiro calculamos a soma da multiplicação dos 9 primeiros dígitos por 10, 9, 8, ... , 3, 2, respectivamente. Ou seja: 
Soma = (1*10) + (2*9) + ... + (8*3) + (9*2) 
Em seguida, dividimos e multiplicamos por 11. (Nota: Ao multiplicarmos utilizamos o valor inteiro da divisão). 
Valor = (Soma/11) * 11 
Por fim, subtraímos Valor de Soma: 
Resultado = Soma - Valor 
Note que acabamos de realizar o módulo de Soma e 11. As duas operações anteriores podem ser substituídas por: 
Resultado = Soma módulo 11. 
 
Agora analisamos Resultado: 
 Se Resultado for igual à 1 ou à 0, então o 1º dígito verificador é 0; 
 Caso contrário, o 1º dígito verificador é igual a 11- Resultado. 
2º DÍGITO VERIFICADOR 
Primeiro calculamos a soma da multiplicação dos 9 primeiros dígitos por 11, 10, 9, ... , 4, 3, respectivamente e 
em seguida somamos com (Digito1*2), sendo que Digito1 é o valor encontrado para o 1º dígito verificador. Ou seja, 
Soma = (1*11) + (2*10) + ... + (8*4) + (9*3) + (Digito1*2) 
O resto é semelhante ao que foi feito anteriormente. Dividimos e multiplicamos por 11. (Nota: Ao multiplicarmos utilizamos 
o valor inteiro da divisão). 
Valor = (Soma/11) * 11 
Por fim, subtraímos Valor de Soma. 
Resultado = Soma - Valor 
Agora analisamos Resultado: 
 Se Resultado for igual à 1 ou à 0, então o 2º dígito verificador é 0; 
 Caso contrário, o 2º dígito verificador é igual a 11- Resultado. 
No nosso exemplo (123.456.789-09)o número é válido. 
 
Bom Trabalho!

Mais conteúdos dessa disciplina