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 –
- Inicialice el registro BC como 0000H para Cociente.
- Cargue el divisor en el par HL y guárdelo en el par de registros DE.
- Cargue el dividendo en el par HL.
- Restar el contenido del acumulador con registro E.
- Mueva el contenido A a C y H a A.
- Resta con prestado el contenido de A con D.
- Mueva el valor del acumulador a H.
- Si CY=1, vaya al paso 10, de lo contrario, al siguiente paso.
- Incremente el registro B y salte al paso 4.
- AGREGAR ambos contenidos de DE y HL.
- Guarde el resto en la memoria.
- Mueva el contenido de C a L y B a H.
- 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 –
- LXI B, 0000H: inicializa el registro BC como 0000H.
- LHLD 2052H: carga el par HL con dirección 2052.
- XCHG: intercambia el contenido del par HL con el registro del par DE.
- LHLD 2050: carga el par HL con dirección 2050.
- MOV A, L: mueve el contenido del registro L al registro A.
- SUB E: resta el contenido del registro E con el contenido del acumulador.
- MOV L, A: mueve el contenido del registro A al registro L.
- MOV A, H: mueve el contenido del registro H al registro A.
- SBB D: resta el contenido del registro D con el contenido del acumulador con acarreo.
- MOV H, A: mueve el contenido del registro A al registro H.
- JC 2017: salta a la dirección 2017 si hay carry.
- INX B: incrementa el registro BC en uno.
- JMP 200B: salta a la dirección 200B.
- DAD D: suma los contenidos del par DE y HL.
- SHLD 2056: almacena el contenido del par HL en la dirección de memoria 2056 y 2057.
- MOV L, C: mueve el contenido del registro C al registro L.
- MOV H, B: mueve el contenido del registro B al registro H.
- SHLD 2054: almacena el contenido del par HL en la dirección de memoria 2054 y 2055.
- 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