Jump to content

Calcular numero primo em assembly


Lophes

Recommended Posts

Estou com um trabalho em mãos que consiste em criar uma programa na linguagem assemby que me permita ao inserir um numero este me diga se é primo ou não. Eu sou iniciante em programação e como tal estou com algumas dificuldades e agradecia se me pudessem ajudar e dar umas dicas como fazer o programa. Desde já agradeço a ajuda.

Link to comment
Share on other sites

  • 2 weeks later...

Consegui fazer o programa em C:

#include <stdio.h>

main()

{

      int p=0,i,n;

      printf("Introduza um Numero: ");

      scanf("%d",&n);

      i=1;

      while (i<=n)

      {

            if ((n%i)==0)

              p=p+1;

              i=i+1;

              }

             

              if (p==2)

              printf("O numero e primo.");

             

              else

              printf("O numero nao e primo.\n");

              system ("pause");

      }

Pelo que estive a ver tudo isto é possível codificar em assembly, agora o meu problema é como vou puder gerir a relação entre os comandos (while e if) em assembly. Se alguém me puder ajudar agradeço.

Link to comment
Share on other sites

    Testei com um exemplo muito simples "Hello Word" e o parametro -s em linha de comandos funcionou lindamente. Estou a usar o DevC++ em Windows XP SP3.

Cordiais cumprimentos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Na linha de comandos, do windows, muda de directorio até ao directorio onde tiveres o gcc.exe, copia para lá o ficheiro .C teuprograma.c, e usa exactamente o parametro -s.

c:\GCC\>gcc -s teuprograma.c 

    Comigo resultou, com o exemplo hello_world.c

Cordiais cumprimentos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Ola Bom dia,

Uma solução possível e utilizares o comando DIV.  Por exemplo:

mov BL, 2

mov AX, 5  --- AX e composto por (AH,AL) 

div BL        --- a operação e sempre feita em AX (AH guarda resto e AL guarda quociente)

Portanto este caso AH = 1  AL = 2...

Então o que podes fazer logo para excluir os numeros pares, e fazer isto e verificar se o AH = 1, logo se for tens um numero impar. 

Passos seguintes e fazeres um contador que vá experimentando os números ímpares ate ao introduzido e verifique se o AH = 0, se for e porque não e primo senão for 0 ate ao numero que tu tens e pk e. Exemplo:

7

pegas fazes um contador que comece no 3 e vais dividindo.

7/3 - resto = 1 ----  como o AH <> 0 -- seguinte

7/5 - resto = 2 ---    AH<>0

agora o numero seguinte era o 7 , como já sabes que e primo não precisas de fazer +,  o teu contador vai ate NUM-2.

Espero ter ajudado, pra facilitar fazes 2 ciclos distintos o 1ª pra excluir os pares qd tiveres esse a funcionar o 2º pra excluir impares.

Se o numero introduzido "escapar" a estes 2 ciclos e pk e primo.

Link to comment
Share on other sites

Boas, desde já agradeço a tua dica, mas não estou a conseguir acompanhar o teu raciocinio. Deixo aqui o codigo que consegui fazer. Se alguem me puder ajudar agradeço.

mov r0, #4 ;n adicionar 

mov r1, #2

mov r7, #10

mov A, r0

mov B, r1

DIVISAO:            div AB

mov r3,A ;

mov r4,B ; resto

IF: JC verd

Verd:                inc r5

ELSE:                JNZ fals

fals:                  dec r7

SJMP DIVISAO

P.S. Isto é focado para o  microprocessador 8051.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.