Código:
Gracias por la ayuda que me puedan dar :) 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


