Que pena responder tan tarde.... posiblemente la competencia ya a acabado, y posiblemente este programa no compita con los presentados hasta el momento, pero aca envio un programa de mi autoria que solo los genera hasta el 1024, pero en lenguaje asembler.. para mic 80c51....
PRACTICA: DETECTOR DE NUMEROS PRIMOS DEL 0 AL 1024
DESARROLLADOR: ANDRES ALBERTO DIAZ
;------------------------------------------------------------------------------
ORG 00H ;INICIO DEL PROGRAMA PARA CRIMSON
;------------------------------------------------------------------------------
MOV R2,#03H ;NUMEROS DEL 3 AL 1024 NUMERADOR
MOV R3,#02H ;CONTADOR DE 2 A N-1 DENOMINADOR
MOV R0,#02H ;DIRECCIONADOR QUE CONTROLARA EL NUMERO QUE SE REVISA NUMERADOR
MOV R1,#03H ;DIRECCIONADOR QUE CONTROLARA EL NUMERO DE DIVISIONES QUE HAY QUE HACER PARA DETECTAR SI EL NUMERO ES PAR O IMPAR DENOMINADOR
;------------------------------------------------------------------------------
;************************************************* *EXCLUSIVO DE CRIMSON*********
MOV 40H,#02H ;MOSTRARA EN LA POCISION 40H EL NUMERO EN CASO TAL DE SER PRIMO//EN MICROLAB SE REEMPLAZA POR SHOW IN DISPLAY
;************************************************* *EXCLUSIVO DE CRIMSON*********
;------------------------------------------------------------------------------
AA: MOV 05H,@R0 ;SE CARGA EL R5 CON LO QUE HAYA EN DIRECCION DE R0/ OSEA QUE TENEMOS EN R5 EL NUMERO QUE SE VA A REVISAR/ ESTE IRA AUMENTADO HASTA 1024 DENOMINADOR
MOV 06H,@R1 ;SE CARGA EL R6 CON LO QUE HAYA EN DIRECCION DE R1/ OSEA QUE TENEMOS EN R6 EL NUMERO DE VECES QUE HAY QUE DIVIDIR EL NUMERO PARA SABER SI ES PRIMO O NO NUMERADOR
MOV A,R5 ;SE CARGA EL ACUMULADOR CON EL NUMERO A EVALUAR NUMERADOR
MOV B,R6 ;SE CARGA B CON EL NUMERO QUE SE VA A DIVIDIR DENOMINADOR
CLC C ;SE REINICIA EL CARRY
DIV AB ;SE DIVIDE EL NUMERO A ESTUDIAR POR EL NUMERO CONTADOR/ SI HAY CARRY LA DIV NO FUE ENTERA/ ENTIENDASE VICEVERSA TAMBIEN
MOV A,B
JNZ AAB ;SI HAY CARRY SALTE A "AB" PARA QUE HAGAN CONTEO DE LOS CARRYS QUE SE PRESENTEN EN EL CICLO
AAC: MOV A,06H ;SE CARGA EL ACUMULADOR CON EL DENOMINADOR ACTUAL
MOV 20H,A ;SE CARGA EN R8 EL VALOR DE A// OSEA EL DENOMINADOR ACTUAL
INC 20H ;INC R8 CON EL FIN DE COMPARAR SI NUMERADOR YA ES IGUAL A DENOMINADOR//CON EL FIN DE QUE EL DENOMINADOR SOLO VALLA DE 2 A N-1
MOV A,R5 ;SE CARGA CON EL VALOR DE R5/ Q SE SUPONE TIENE EL NUMERO POR EL CUAL SE ESTA DIVIDIENDO/ ESTO ES CON EL FIN DE SABER SI YA ES IGUAL NUM/DEN
INC R3 ;SE INCREMENTA EN UNO/ PARA PASAR AL SIGUIENTE DENOMINADOR
CJNE A,20H,AA ;SI SON IGUALES QUIERE DECIR QUE YA SE HICIERON TODAS LAS DIVISIONES CORRESPONDIENTES PARA EL NUMERO QU SE EVALUA/ OSEA QUE YA SE SABE SI ES PRIMO O NO
LJMP BA
AAB: INC R4 ;R4 CONTARA EL NUMERO DE CARRYS
LJMP AAC ;SALTA A AC QUE HACE EL CONTEO DE LOS DENOMINADORES Y LO HACE CICLICO HASTA QUE SE HAGAN TODAS LAS DIVISIONES DE 2 A N-1 POR CADA DENOMINADOR
;-------------------------------------------------------------------------------
BA: MOV A,R5 ;SE CARGA ACUMM CON EL VALOR DEL NUMERADOR QUE SE ACABO DE EVALUAR
DEC A
DEC A ;SE DECREMENTA EL NUM 2 VECES PARA COMPARAR SI LUEGO ES IGUAL AL NUMERO DE CARRYS
CJNE A,04H,BB ;COMPARA SI EL NUMERO DE CARRYS ES IGUAL A NUMERADOR-2//SI ES IGUAL ENTONCES EL NUMERO ES PRIMO Y CONTINUE/SI NO ES IGUAL NO ES PRIMO SALTE A BB
;************************************************* *EXCLUSIVO DE CRIMSON*********
MOV 40H,R5 ;MOSTRARA EN LA POCISION 40H EL NUMERO EN CASO TAL DE SER PRIMO//EN MICROLAB SE REEMPLAZA POR SHOW IN DISPLAY
;************************************************* *EXCLUSIVO DE CRIMSON*********
BB: MOV R4,#00H ;SE RESETEA EL CONTADOR DE CARRYs
MOV A,R5 ;GUARDAMOS EN EL ACUMULADOR EL NUMERADOR ACTUAL
INC R2 ;SE AUMENTA R2 PARA QUE PASE AL NUMERADOR SIGUIENTE
MOV R3,#02H ;SE INICIALIZA NUEVAMENTE R3 PARA QUE VUELVA A EMPEZAR DESDE 2 Y PUEDA VOLVER A AUMENTAR HASTA N-1
CJNE A,#0FFH,AA ;VUELVE Y EMPIEZA EL PROGRAMA CON EL SIGUIENTE NUMERADOR
END
;-------------------------------------------------------------------------------
|