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:
- Cargue los primeros datos en el par HL.
- Mueva el contenido del par HL al puntero de pila.
- Cargue los segundos datos en el par HL y muévalos a DE.
- Haga que el registro H sea 00H y el L sea 00H.
- ADD HL par y puntero de pila.
- Compruebe el acarreo, si acarrea, increméntelo en 1; de lo contrario, pasa al siguiente paso.
- Luego mueva E a A y realice la operación OR con el acumulador y registre D.
- 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.
- LHLD 2050: cargar par HL con datos de dirección 2050 y 2051.
- SPHL: guarda el contenido de HL en el puntero de la pila.
- LHLD 2052: cargar par HL con datos de direcciones 2052 y 2053.
- XCHG: intercambiar el contenido del par HL con DE.
- LXI H, 0000H: haga H como 00H y L como 00H.
- LXI B, 0000H: hacer B como 00h y C como 00H
- DAD SP: ADD HL par y puntero de pila.
- JNC 2013: salta a la dirección 2013 si no habrá acarreo.
- INX B: incrementa el registro BC en 1.
- DCX D: decrementa el par de registros DE en 1.
- MOV A, E: mueve el contenido del registro E al acumulador.
- ORA D: o el contenido del acumulador y registro D.
- JNZ 200E: salte a la dirección 200E si no habrá cero.
- SHLD 2054: almacena el resultado en las direcciones de memoria 2054 y 2055 del registro de pares HL.
- MOV L, C: mueve el contenido del registro C a L.
- MOV H, B: mueve el contenido del registro B al H.
- SHLD 2056: almacena el resultado en las direcciones de memoria 2056 y 2057 del registro de pares HL.
- 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