Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/07/2010, 13:30
batiguason
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 15 años
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 :)