8086 programa para encontrar la suma de números impares en una serie dada

Problema: escriba un programa en lenguaje ensamblador para encontrar la suma de números impares en una serie dada que contenga números de 8 bits almacenados en una ubicación de memoria continua y almacene el resultado en otra ubicación de memoria. 

Ejemplo – 

Ejemplo de explicación – 

  1. 500 offset almacena el valor del contador de la serie y los elementos de la serie comienzan desde 501 a 504 offset. 
  2. En este ejemplo, tenemos 4 términos solamente. Sumar los términos impares (que se encuentran en el registro BL) 15+07 en el registro AL y el resultado se almacena (1C) en el registro AL. 
  3. El resultado del registro AL se almacena en 600 compensaciones. 
     

Suposiciones – 

  1. El valor del contador que indica cuántos números hay en la serie se almacena en la ubicación de memoria 500. 
  2. Los elementos de la serie se almacenan en una ubicación de memoria continua a partir de 501. 
  3. El resultado se almacena en una ubicación de memoria 600. 
  4. La dirección inicial del programa es 400. 
     

Prueba – 

Syntax: TEST d, s 

Realiza la operación AND de destino(d) y fuente(s), pero el resultado no se almacena, solo se modifican los indicadores. 

Algoritmo – 

  1. Cargue datos del desplazamiento 500 al registro CL. 
  2. Incrementa el valor de la compensación. 
  3. Cargue 00H en el registro CH. 
  4. Cargue 00H en el registro AL. 
  5. Cargue datos desde el desplazamiento al registro BL. 
  6. Use la instrucción TEST para verificar si los datos en BL son pares o impares, si el indicador cero está configurado significa que los datos son pares, luego vaya al paso 7; de lo contrario, los datos son impares, luego vaya al paso 8. 
  7. Salta a la ubicación de memoria 413H. 
  8. Agregue los datos de los registros AL y BL y almacene el resultado en el registro AL. 
  9. Incrementa el valor de la compensación. 
  10. Vaya a la ubicación de memoria 40AH si el contenido de CX no es igual a cero; de lo contrario, vaya al paso 11. 
  11. Cargue los datos del registro AL en la ubicación de memoria 600. 
  12. Final 
     

Programa – 

Dirección Mnemotécnica Comentarios
400 MOV SI, 500 SI<-500
403 CL MOV, [SI] CL<-[SI]
405 INC SI SI<-SI+1
406 CA MOV, 00 CH<-00
408 MOV AL, 00 AL<-00
40A MOV BL, [SI] BL<-[SI]
40C PRUEBA BL, 01 BL.01
40F JZ 413 Saltar a la ubicación de memoria 413 si se establece el indicador cero
411 AÑADIR AL, BL AL<-AL+BL
413 INC SI SI<-SI+1
414 BUCLE 40A saltar a la ubicación de memoria 40A si el contenido de CX no es igual a cero
416 MOV [600], AL [600], AL
41A HLT final

Explicación – 

  1. MOV SI, 500 carga el valor 500 a SI. 
  2. MOV CL, [SI] carga los datos del desplazamiento SI en el registro CL. 
  3. INC SI aumenta el valor de SI en uno. 
  4. MOV CH, 00 carga el valor 00 en el registro CH. 
  5. MOV AL, 00 carga el valor 00 en el registro AL. 
  6. MOV BL, [SI] carga los datos del desplazamiento SI en el registro BL. 
  7. PRUEBA BL, 01 Y se modifica la operación del contenido de BL y el valor 01 y los registros de bandera. 
  8. JZ 413 salta a la ubicación de memoria 413 si se establece el indicador cero. 
  9. ADD AL, BL agrega el contenido de los registros AL y BL y almacena el resultado en el registro AL. 
  10. INC SI aumenta el valor de SI en uno. 
  11. LOOP 40A salta a la ubicación de memoria 40A si el valor de CX no es igual a cero. 
  12. MOV [600], AL carga el contenido del registro AL en la ubicación de memoria 600. 
  13. HLT detiene la ejecución del programa. 

Publicación traducida automáticamente

Artículo escrito por priyankagujral 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 *