Programa 8085 para dividir dos números de 16 bits

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

Suposición – 
 

  • Dirección inicial 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) = 00H 
       (2052H) = 02H 
       (2053H) = 00H
OUTPUT:
        (2054H) = 02H
        (2055H) = 00H
        (2056H) = FEH
        (2057H) = FFH 

RESULTADO: 
Por lo tanto, hemos dividido dos números de 16 bits. 

Algoritmo – 
 

  1. Inicialice el registro BC como 0000H para Cociente. 
     
  2. Cargue el divisor en el par HL y guárdelo en el par de registros DE. 
     
  3. Cargue el dividendo en el par HL. 
     
  4. Restar el contenido del acumulador con registro E. 
     
  5. Mueva el contenido A a C y H a A. 
     
  6. Resta con prestado el contenido de A con D. 
     
  7. Mueva el valor del acumulador a H. 
     
  8. Si CY=1, vaya al paso 10, de lo contrario, al siguiente paso. 
     
  9. Incremente el registro B y salte al paso 4. 
     
  10. AGREGAR ambos contenidos de DE y HL. 
     
  11. Guarde el resto en la memoria. 
     
  12. Mueva el contenido de C a L y B a H. 
     
  13. Almacene el cociente en la memoria. 
     

Programa – 
 

DIRECCIÓN DE MEMORIA MNEMOTÉCNICA COMENTARIOS
2000 LXI B, 0000H INICIALIZAR COCIENTE COMO 0000H
2003 LHLD 2052H CARGAR EL DIVISOR EN HL
2006 XCHG INTERCAMBIO HL Y DE
2007 LHLD 2050 CARGAR EL DIVIDENDO
200A MOV A, L A<-L
200B SUB E A<-AE
200C MOV L, A L<-A
200D MOV A, H A<-H
200E SBB D A<-AD
200F MOV H, A H<-A
2010 JC 2017 SALTAR CUANDO LLEVAR
2013 INX-B B<-B+1
2014 JMP 200B  
2017 PAPÁ D HL<-DE+HL
2018 SHLD 2056 HL ESTÁ ALMACENADO EN LA MEMORIA
201B MOV L, C L<-C
201C MOV H, B H<-B
201D SHLD 2054 HL ESTÁ ALMACENADO EN LA MEMORIA
2020 HLT TERMINA EL PROGRAMA

Explicación – 
 

  1. LXI B, 0000H: inicializa el registro BC como 0000H. 
     
  2. LHLD 2052H: carga el par HL con dirección 2052. 
     
  3. XCHG: intercambia el contenido del par HL con el registro del par DE. 
     
  4. LHLD 2050: carga el par HL con dirección 2050. 
     
  5. MOV A, L: mueve el contenido del registro L al registro A. 
     
  6. SUB E: resta el contenido del registro E con el contenido del acumulador. 
     
  7. MOV L, A: mueve el contenido del registro A al registro L. 
     
  8. MOV A, H: mueve el contenido del registro H al registro A. 
     
  9. SBB D: resta el contenido del registro D con el contenido del acumulador con acarreo. 
     
  10. MOV H, A: mueve el contenido del registro A al registro H. 
     
  11. JC 2017: salta a la dirección 2017 si hay carry. 
     
  12. INX B: incrementa el registro BC en uno. 
     
  13. JMP 200B: salta a la dirección 200B. 
     
  14. DAD D: suma los contenidos del par DE y HL. 
     
  15. SHLD 2056: almacena el contenido del par HL en la dirección de memoria 2056 y 2057. 
     
  16. MOV L, C: mueve el contenido del registro C al registro L. 
     
  17. MOV H, B: mueve el contenido del registro B al registro H. 
     
  18. SHLD 2054: almacena el contenido del par HL en la dirección de memoria 2054 y 2055. 
     
  19. HLT: finaliza la ejecución del 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 *