SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: Guybrush_Treepwood en Miércoles 11 de Enero de 2006, 18:30
-
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
-
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