Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Lophes

Calcular numero primo em assembly

Mensagens Recomendadas

Lophes    0
Lophes

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

Como em assembly não consegues calcular directamente uma raíz quadrada, sugiro que penses no algoritmo para o fazer com subtracções.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ic    0
ic

Como em assembly não consegues calcular directamente uma raíz quadrada, sugiro que penses no algoritmo para o fazer com subtracções.

Consegues no FPU (Floating-Point Unit).  :cheesygrin:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Lophes    0
Lophes

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

O compilador do Dev-C++ é o MinGW, que é um port do GCC para Windows, por isso não sei. Só se der invocando apenas por linha de comandos.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    209
apocsantos

    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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Lophes    0
Lophes

Boas, apocsantos desculpe a minha ignorância mas não estou conseguindo fazer isso, podia por mais pormenorizado o que fez para converter o programa.

Desde já agradeço, com os melhores cumprimentos. 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    209
apocsantos

    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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Catarrunas    0
Catarrunas

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Lophes    0
Lophes

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade