Problema: escriba un programa en lenguaje ensamblador para determinar si un número dado es primo o no utilizando el microprocesador 8085.
Si el número es primo, almacene 01H en la ubicación de memoria que almacena el resultado, de lo contrario, 00H.
Ejemplos:
Input : 03H Output : 01H The number 3 only has two divisors, 1 and 3. Hence, it is prime. Input : 09H Output : 00H The number 9 has three divisors, 1, 3 and 9. Hence, it is composite.
Un número primo es aquel que tiene sólo dos divisores, el 1 y el propio número.
Un número compuesto, por otro lado, tiene 3 o más divisores.
Algoritmo:
- Tomar n como entrada
- Ejecute un ciclo de i = n a 1. Para cada iteración, verifique si i divide n por completo o no. Si es así, entonces i es el divisor de n
- Mantenga una cuenta del número total de divisores de n
- Si la cuenta de divisores es 2, entonces el número es primo, de lo contrario compuesto
¿Cómo saber si i es un divisor o no?
Siga restando i del dividendo hasta que el dividendo se convierta en 0 o menos de 0. Ahora, verifique el valor del dividendo. Si es 0, entonces i es un divisor, de lo contrario no lo es.
Pasos:
- Cargue los datos de la ubicación de la memoria (2029H, elección arbitraria) en el acumulador
- Inicialice el registro C con 00H. Esto almacena el número de divisores de n
- Mueva el valor en el acumulador en E. Esto actuará como un iterador para el ciclo de n a 1.
- Mueva el valor en el acumulador en B. B almacena permanentemente n porque el valor en el acumulador cambiará
- Mueve el valor de E a D y realiza la división con el acumulador como dividendo y D como divisor.
- División: siga restando D de A hasta que el valor de A sea 0 o menos de 0. Después de esto, verifique el valor en el acumulador. Si es igual a 0, entonces incremente el conteo de divisores incrementando el valor en C por uno
- Restaure el valor del acumulador moviendo el valor de B a A y continúe con el bucle hasta que E se convierta en 0
- Ahora, mueve el número de divisores de C a A y verifica si es igual a 2 o no. Si es así, almacene 01H a 202AH (arbitrario), de lo contrario almacene 00H.
202AH contiene el resultado.
DIRECCIÓN | ETIQUETA | MNEMOTÉCNICO |
---|---|---|
2000H | LDA 2029H | |
2001H | ||
2002H | ||
2003H | MVI C, 00H | |
2004H | ||
2005H | MUEVE UN | |
2006H | MOV B, A | |
2007H | BUCLE1 | MOV D, E |
2008H | BUCLE2 | CMP D |
2009H | JC DIVIDENDLESTH0 | |
200AH | ||
200BH | ||
200CH | SUB-D | |
200DH | JNZ LOOP2 | |
200EH | ||
200FH | ||
2010H | DIVIDENDLESLESTH0 | IPC 00H |
2011H | ||
2012H | NOTADIVISOR JNZ | |
2013H | ||
2014H | ||
2015H | INR C | |
2016H | NOTADIVISOR | MOV A, B |
2017H | DCR E | |
2018H | BUCLE JNZ1 | |
2019H | ||
201AH | ||
201BH | MOV A, C | |
201CH | MVI C, 00H | |
201DH | ||
201EH | IPC 02H | |
201FH | ||
2020H | COMPUESTO JNZ | |
2021H | ||
2022H | ||
2023H | INR C | |
2024H | COMPUESTO | MOV A, C |
2025H | STA 202AH | |
2026H | ||
2027H | ||
2028H | HLT |
Almacene el valor de n en 2029H. Si 202AH contiene 01H, entonces n es primo, de lo contrario, compuesto.
Publicación traducida automáticamente
Artículo escrito por aganjali10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA