Programa: escriba un programa en lenguaje ensamblador en un microprocesador 8085 para contar números pares en una serie de 10 números.
Ejemplo –
Suposición: se almacenan diez números de 8 bits desde la ubicación de memoria inicial 2050. El valor de conteo se almacena en la ubicación de memoria 3050.
Algoritmo –
- Inicialice el registro H con 20 y el registro L con 4F para que la memoria indirecta apunte a la ubicación de memoria 204F.
- Inicialice el registro C con 00 y el registro D con 0A.
- Incrementa la memoria indirecta en 1.
- Almacene el valor de M en el acumulador A.
- Compruebe si el contenido de A es par o impar realizando la operación AND de A con 01.
- Si el contenido de A es 00 después de la operación AND, entonces el número escaneado fue par, si es así, incremente C en 01; de lo contrario, si el contenido de A es 01 después de la operación AND, entonces el número escaneado fue impar, si es así, entonces disminuye D en 01.
- Verifique si el indicador cero no está configurado, es decir, ZF = 0, luego salte al paso 3; de lo contrario, almacene el valor de C en la ubicación de memoria 3050.
Programa (Usando Instrucción ANI) –
DIRECCIÓN DE MEMORIA | MNEMOTÉCNICA | COMENTARIO |
---|---|---|
Explicación: los registros A, B, C, D, H, L se utilizan para fines generales.
- LXI H 204F: asigne 20 a H y 4F a L.
- MVI C, 00: asigna 00 a C.
- MVI D, 0A: asigna 0A a D.
- INX H: incrementa la ubicación de memoria indirecta M en 01.
- MOV A, M: mueve el contenido de M a A.
- ANI 01: realiza la operación AND de A con 01 y almacena el resultado en A.
- JNZ 200F: salta si ZF = 0 a la ubicación de memoria 200F.
- INR C: incrementa C en 01.
- DCR D: decrementa D en 01.
- JNZ 2007: salta si ZF = 0 a la ubicación de memoria 2007.
- MOV A, C: mueve el contenido de C a A.
- STA 3050: almacene el contenido de A en la ubicación de memoria 3050.
- HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.
Enfoque alternativo (usando instrucciones de rotación):
Para un conjunto dado de números, si el bit menos significativo (LSB) de la representación binaria de cada número es 1, entonces se asegura que el número dado es un número impar.
Pero si el bit menos significativo (LSB) de la representación binaria de cada número es 0, entonces se asegura que el número dado sea un número par.
Por lo tanto, aquí utilizaremos las instrucciones de rotación del microprocesador 8085. es decir , Instrucción RAR (Rotar Acumulador a la Derecha involucrando bandera de Acarreo en Rotación).
Si rotamos el número binario dado en la dirección correcta en 1 bit, obtendremos la bandera de acarreo como Cero o Uno.
Si obtenemos Carry Flag = 1, entonces el número dado es IMPAR, de lo contrario PAR.
DIRECCIÓN DE MEMORIA |
simbolos |
COMENTARIO |
---|---|---|
2000 | LXI H,204FH | Cargar par HL con ubicación anterior de 2050H, H <- 20, L <- 4F |
2003 | MVI C,00H | Para almacenar el conteo de números pares [C]=0H |
2005 | MVI D,0AH | Para series de 10 números, hemos almacenado el tamaño de la array como [D] = 10 |
2007 | INXH | Puntero de memoria de incremento apuntado por par HL |
2008 | MOV A,M | Mueva el contenido de la ubicación de memoria 2050H al acumulador A. {[A] <- [M]} |
2009 | RAR | Gire el acumulador a la derecha con acarreo. |
200B | JC 200F | Después de rotar si Llevar bandera = 1, podemos decir que el número dado es IMPAR, por lo que solo tenemos que pasar al siguiente elemento, no hay nada más que hacer aquí. |
200E | INR C | si encontramos que Carry Flag = 0, entonces podemos decir que el número dado es PAR, por lo que debemos incrementar nuestro conteo en 1. Por lo tanto, INR C ocurrirá para todas las condiciones posteriores. |
200F | DCR D | Ahora, si descubrimos si el número dado es IMPAR/PAR, entonces debemos disminuir el tamaño de la array porque aquí el tamaño es 10 y debemos disminuir hasta 0. |
2010 | JNZ 2007 | Hasta que [D] = 0, tenemos que disminuir D y movernos a la siguiente ubicación de memoria y tomar la entrada de 10 números (esta es una estructura en bucle). |
2013 | MOV A,C | (Después de que termine todo el bucle) Transfiera/Copie el contenido del registro C que contiene el número total de números pares en el acumulador. |
2014 | STA 3050H | Almacene el contenido del acumulador que contiene el conteo de números pares en la ubicación de memoria 3050H como se requiere en la pregunta |
2017 | HLT | Fin de la ejecución de un programa |
Publicación traducida automáticamente
Artículo escrito por AmishTandon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA