Foros del Web » Programación para mayores de 30 ;) » Programación General »

MASM números primos[ayuda]

Estas en el tema de MASM números primos[ayuda] en el foro de Programación General en Foros del Web. Veran estoy haciendo un programa en MASM que me dice si un número es primero, pero al momento de dividir el número entre 5 falla ...
  #1 (permalink)  
Antiguo 04/07/2010, 13:30
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
MASM números primos[ayuda]

Veran estoy haciendo un programa en MASM que me dice si un número es primero, pero al momento de dividir el número entre 5 falla algo, no me guarda el residuo correctamente en dx, me podrian ayudar por favor :) el programa divide el número entre 2,3,5 y 7 y según un contador me dice si es primo o no, si el contador es igual a 3 ya no es primo.

Código:
DATOS SEGMENT PARA PUBLIC 'DATA'
    PRIMO DB 'Es primo',0AH,0Dh,'$'
    NPRIMO DB 'No es primo',0AH,0DH,'$'
    ERROR DB 'Solo acepto digitos',0AH,0DH,'$'
    CON   DB 0
DATOS ENDS
PILA SEGMENT PARA STACK 'STACK'
    DB 64 DUP (0)
PILA ENDS
CODIGO SEGMENT PARA PUBLIC 'CODE'
    ASSUME DS:DATOS,SS:PILA,CS:CODIGO
    MAIN PROC FAR
        INI:PUSH DS
            SUB AX,AX
            PUSH AX
            MOV CON,0
        LEE:MOV AH,01
            INT 21H     ;LEEMOS 1 DIGITO
            SUB AL,30H  ;COMPROBAMOS SI ES
            CMP AL,0AH  ;NUMERO O CARACTER
            JL CONVER   ;FUE DIGITO
            MOV AX,DATOS;IMPRIME MSG ERROR
            MOV DS,AX   
            MOV DX,OFFSET ERROR
            CALL IMPRIME
            JG LEE      ;FUE CARACTER
     CONVER:MOV AH,00   ;ES CERO?
            CMP AL,0
            JZ CERO1    ;FUE CERO NO CONVERTIMOS
            MOV CX,0008
            SHL AX,CL
      CERO1:MOV BX,AX   ;COLOCAMOS EL PRIMER DIGITO
       LEE1:MOV AH,01
            INT 21H
            SUB AL,30H
            CMP AL,0AH
            JLE DIGIT
            MOV AX,DATOS
            MOV DS,AX
            MOV DX,OFFSET ERROR
            CALL IMPRIME
            JG LEE1
      DIGIT:MOV AH,00
            CMP AL,0
            JZ CERO2
            MOV CX,0004
            SHL AL,CL
      CERO2:ADD BX,AX
       LEE2:MOV AH,01
            INT 21H
            SUB AL,30H
            CMP AL,0AH
            JL DIGIT1
            MOV AX,DATOS
            MOV DS,AX
            MOV DX,OFFSET ERROR
            CALL IMPRIME
     DIGIT1:MOV AH,00
            ADD BX,AX
            MOV AX,BX    
            PUSH BX
            MOV BX,0001
            DIV BX
            CMP DX,0000     ;ES MULTIPLO DE 1?
            JG M2
            INC CON
         M2:POP BX
            MOV AX,BX
            PUSH BX
            MOV BX,0002
            DIV BX
            CMP DX,0000     ;ES MULTIPLO DE 2?   
            JG M3
            INC CON
         M3:POP BX
            MOV AX,BX
            PUSH BX
            MOV BX,0003
            DIV BX
            CMP DX,0000     ;ES MULTIPLO DE 3?
            JG M5
            INC CON
            CMP CON,03
            JZ NP
         M5:POP BX
            MOV AX,BX
            PUSH BX
            MOV BX,0005
            DIV BX
            CMP DX,0000     ;ES MULTIPLO DE 5?
            JG M7
            INC CON
            MOV AL,CON
            CMP AL,03
            JZ NP
         M7:POP BX
            MOV AX,BX
            PUSH BX
            MOV BX,0007
            DIV BX
            CMP DX,0000     ;ES MULTIPLO DE 7?
            JG PRI
            INC CON
            MOV AL,CON
            CMP AL,03
            JZ NP
        PRI:MOV AX,DATOS
            MOV DS,AX
            MOV DX,OFFSET PRIMO
            CALL IMPRIME
            JG FIN
         NP:MOV AX,DATOS
            MOV DS,AX
            MOV DX,OFFSET NPRIMO
            CALL IMPRIME            
        FIN:RET
    MAIN ENDP
    IMPRIME PROC NEAR
        MOV AH,09
        INT 21H
        MOV AH,00
        RET
    IMPRIME ENDP
CODIGO ENDS
END INI
Gracias por la ayuda que me puedan dar :)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:38.