• Domingo 28 de Abril de 2024, 22:58

Autor Tema:  Numeros Primos  (Leído 6249 veces)

Guybrush_Treepwood

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Numeros Primos
« en: Miércoles 11 de Enero de 2006, 18:30 »
0
Buenas:

Tengo un problemilla y es que no se como calcular correctamente, usando ensamblador, el como saber si un numero introducido por teclado es o no un numero primo.

El codigo que tengo escrito es el siguiente:

dosseg
.model small
.stack 100h
.data
        numero db 30h,30h,30h
        factor db 10
        primo db 'Es primo',10,13,'$'
        noprimo db 'No es primo',10,13,'$'
.code

convertir proc
sub al, 30h
ret
convertir endp


inicio:
        mov ax,@data
        mov ds,ax

        mov ah,1
        int 21h
        call convertir
        mov numero,al
        int 21h
        call convertir
        mov numero[1],al
        int 21h
        call convertir
        mov numero[2],al


        mov bh,numero[0]
   mov bl,numero[1]
        mov cl,4
   shl bl,cl
   shr bx,cl
   
   mov cl,bl
   xor ax,ax
et1:
   div cl
   cmp ax,0
   jnz esprimo
   dec cx
   jcxz noesprimo
   jmp et1
   
noesprimo:
   mov ah, 9
   lea dx, noprimo
   int 21h
   jmp fin
esprimo:
   mov ah, 9
   lea dx, primo
   int 21h
   
   
fin:
   mov ah, 4Ch
   int 21h
   end inicio


Si me podeis hechar una mano os lo agradeceria muchisimo.

Un saludo

Guybrush_Treepwood

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Numeros Primos
« Respuesta #1 en: Jueves 12 de Enero de 2006, 13:02 »
0
Buenas:

Sigo con mi problema, pero algo he conseguido avanzar, ya he conseguido que me reconozca si son primos o no los numeros que introduzco por teclado, pero tiene un fallo y es que al introducir por ejemplo el numero 65 me dice que es primo o el 25, os dejo el codigo del programa tal y como esta ahora, si me podeis ayudar os lo agradeceria mucho:


Dosseg
.model small
.stack 100h
.data
        numero db 30h,30h,30h
        factor db 10
        primo db 'Es primo',10,13,'$'
        noprimo db 'No es primo',10,13,'$'
.code
convertir proc
sub al, 30h
ret
convertir endp

Inicio:
mov ax, @data
mov ds, ax
   mov ah,1
        int 21h
        call convertir
        mov numero,al
        int 21h
        call convertir
        mov numero[1],al
        int 21h
        call convertir
        mov numero[2],al


        mov bh,numero[0]
   mov bl,numero[1]
        mov cl,4
   shl bl,cl
   shr bx,cl

   xor dl,dl
   mov dl,2
bucle:   
   cmp dl,bl
   jz esprimo
   xor ax,ax
   mov al,bl
   mov cl,dl
   div cl
   cmp ah,0
   jz noesprimo
   inc dl
   jmp bucle
   

noesprimo:
   mov ah, 9
   lea dx, noprimo
   int 21h
   jmp fin
esprimo:
   mov ah, 9
   lea dx, primo
   int 21h
   
   
fin:
   mov ah, 4Ch
   int 21h
   end inicio


Un saludo