Programa 8085 para encontrar la suma de dígitos de un número de 8 bits

Problema: Escriba un programa en lenguaje ensamblador en un microprocesador 8085 para encontrar la suma de los dígitos de un número de 8 bits. 

Ejemplo:

  

Suposiciones: Las direcciones de datos de entrada y datos de salida son 2050 y 3050 respectivamente. 

Algoritmo:

  1. Cargue el valor almacenado en la ubicación de memoria 2050 en el acumulador A
  2. Mueva el valor del acumulador A en el registro B al proceso 43H.
  3. Realice el enmascaramiento de nibbles, es decir, realice la operación AND del acumulador A con OF con la ayuda de la instrucción ANI (Modo de direccionamiento inmediato con AND). Obtendremos un valor de nibble más bajo en el acumulador A. Debido a 0F, Higher Nibble se enmascarará y se obtendrá un nibble más bajo tal como está.
  4. Mueva el valor del acumulador A en el registro C, porque actualmente, el valor del acumulador es el valor de un nibble inferior, por lo que [C] = Valor de nibble inferior = 3H
  5. Mueva el valor del registro B en el acumulador A, debido a que el valor del acumulador se actualiza, por lo tanto, moveremos nuevamente el valor de B al acumulador.
  6. Invierta el número que está almacenado en el acumulador A utilizando la instrucción RLC 4 veces y vuelva a enmascarar los nibbles como se hizo en el paso 3.
  7. Suma el valor del registro C en el acumulador A
  8. Almacene el valor de A en la ubicación de memoria 3050

(Después de usar 4 veces RLC, revertiremos el número dado porque después de 4 veces, 4 bits se moverán hacia la izquierda y nuevamente se rotarán de MSB a LSB y viceversa, por lo tanto, obtendremos el número invertido, y después de usar ANI 0F , obtendremos valores de nibble más bajos en ambos casos. Por lo tanto, después de agregar estos 2 valores usando la instrucción ADD C, obtenemos una suma de dígitos en un número dado). 

Programa –

Explicación: Registros usados ​​A, B, C

  1. LDA 2050: carga el contenido de la ubicación de memoria 2050 en el acumulador A
  2. MOV B, A: mueve el valor del acumulador A en el registro B
  3. ANI 0F: realiza la operación AND en valor del acumulador A y 0F
  4. MOV C, A: mueve el valor del acumulador A en el registro C
  5. MOV A, B: mueve el valor del registro B en el acumulador A
  6. RLC: la instrucción rota el valor del acumulador A, 1 bit a la izquierda. Dado que se realiza 4 veces, esto invertirá el número, es decir, intercambiará el nibble de orden inferior con un nibble de orden superior.
  7. Repita el paso 3
  8. ADD C: Suma el contenido del registro de C en el acumulador A
  9. STA 3050: Almacena el valor de A en 3050
  10. HLT: detiene la ejecución del programa y detiene cualquier ejecución adicional

INSTRUCCIÓN ADICIONAL: Esta tarea se puede realizar de una forma utilizando la instrucción RRC 4 veces.

LDA 2050

AÑO 0F

MOV C, A

MOV A, B

CRR

RRC //4 RRC hacen el mismo trabajo que 4 RLC. Entonces podemos usar cualquiera alternativamente.

CRR

CRR

AÑO 0F

AÑADIR C

STA 3050

HLT

FINAL

Example :
16H in Binary Written as :
0001 0110 
RLC 1st Time : 0010 1100  {Carry Flag = 0}
RLC 2nd Time : 0101 1000  {Carry Flag = 0}
RLC 3rd Time : 1011 0000  {Carry Flag = 0}
RLC 4th Time : 0110 0001 { Carry Flag = 1}
Converted Number after 4th RLC : 0110 0001 [61H]
Hence our number is reversed from 16H to 61H.

For Example : 16H in Binary Written as :
0001 0110 
RRC 1st Time : 0000 1011  {Carry Flag = 0}
RRC 2nd Time : 1000 0101  {Carry Flag = 1}
RRC 3rd Time : 1100 0010 { Carry Flag = 1}
RRC 4th Time : 0110 0001 { Carry Flag = 0}
Converted Number after 4th RRC : 0110 0001 [61H]
Hence our number is reversed from 16H to 61H.
Hence Instead of 4 RLC, we can also use 4 RRC instructions in our code and 
accordingly AND them with 0F in the same way as above.

Publicación traducida automáticamente

Artículo escrito por AmishTandon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *