Programa 8085 para multiplicar dos números de 16 bits

Problema: Escriba un programa en lenguaje ensamblador en un microprocesador 8085 para multiplicar dos números de 16 bits. 

Suposición:

  • La dirección de inicio del programa: 2000 
  • Ubicación de la memoria de entrada: 2050, 2051, 2052, 2053 
  • Ubicación de la memoria de salida: 2054, 2055, 2056, 2057 

Ejemplo:

INPUT:
       (2050H) = 04H
       (2051H) = 07H 
       (2052H) = 02H 
       (2053H) = 01H
OUTPUT:
        (2054H) = 08H
        (2055H) = 12H
        (2056H) = 07H
        (2057H) = O0H

Resultado:  Por lo tanto, hemos multiplicado dos números de 16 bits. 

Algoritmo:

  1. Cargue los primeros datos en el par HL. 
  2. Mueva el contenido del par HL al puntero de pila. 
  3. Cargue los segundos datos en el par HL y muévalos a DE. 
  4. Haga que el registro H sea 00H y el L sea 00H. 
  5. ADD HL par y puntero de pila. 
  6. Compruebe el acarreo, si acarrea, increméntelo en 1; de lo contrario, pasa al siguiente paso. 
  7. Luego mueva E a A y realice la operación OR con el acumulador y registre D. 
  8. Si el valor de la operación es cero, almacene el valor; de lo contrario, vaya al paso 3. 

Programa:

DIRECCIÓN DE MEMORIA MNEMOTÉCNICA COMENTARIOS
2000 LHLD 2050 Carga par HL con datos de dirección 2050 y 2051
2003 SPHL GUARDARLO EN PUNTERO DE APILAMIENTO
2004 LHLD 2052 Carga par HL con datos de dirección 2052 y 2053
2007 XCHG INTERCAMBIAR CONTENIDO HL Y DE PAIR
2008 LXIH,0000H H<-00H,L<-00H
200B LXI B,0000H B<-00H,C<-00H
200E PAPÁ SP  
200F JNC 2013 SALTAR NO LLEVAR
2012 INX-B INCREMENTAR BC EN 1
2013 DCX D DISMINUIR DE EN 1
2014 MOV A,E A<-E
2015 ORA D O EL CONTENIDO DEL ACUMULADOR Y EL REGISTRO D
2016 JNZ 200E SALTO NO CERO
2019 SHLD 2054 L<-2054,H<-2055
201C MOV L,C L<-C
201D MOV H,B B<H
201E SHLD 2056 L<-2055,H<-2056
2021 HLT TERMINA EL PROGRAMA

Explicación: 

Los registros B, C, D, E, H, L y el acumulador se utilizan para fines generales. 

  1. LHLD 2050: cargar par HL con datos de dirección 2050 y 2051. 
     
  2. SPHL: guarda el contenido de HL en el puntero de la pila. 
     
  3. LHLD 2052: cargar par HL con datos de direcciones 2052 y 2053. 
     
  4. XCHG: intercambiar el contenido del par HL con DE. 
     
  5. LXI H, 0000H: haga H como 00H y L como 00H. 
     
  6. LXI B, 0000H: hacer B como 00h y C como 00H 
     
  7. DAD SP: ADD HL par y puntero de pila. 
     
  8. JNC 2013: salta a la dirección 2013 si no habrá acarreo. 
     
  9. INX B: incrementa el registro BC en 1. 
     
  10. DCX D: decrementa el par de registros DE en 1. 
     
  11. MOV A, E: mueve el contenido del registro E al acumulador. 
     
  12. ORA D: o el contenido del acumulador y registro D. 
     
  13. JNZ 200E: salte a la dirección 200E si no habrá cero. 
     
  14. SHLD 2054: almacena el resultado en las direcciones de memoria 2054 y 2055 del registro de pares HL. 
     
  15. MOV L, C: mueve el contenido del registro C a L. 
     
  16. MOV H, B: mueve el contenido del registro B al H. 
     
  17. SHLD 2056: almacena el resultado en las direcciones de memoria 2056 y 2057 del registro de pares HL. 
     
  18. HLT: termina el programa. 

Publicación traducida automáticamente

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