Problema: escriba un código en lenguaje ensamblador para calcular la potencia n de un número utilizando el microprocesador 8085.
Ejemplo –
Input : Base=>02H Exponent=>03H Output :08H
En el microprocesador 8085, no existe ninguna instrucción directa para multiplicar dos números, por lo que la multiplicación se realiza mediante sumas repetidas, ya que 4*4 equivale a 4+4+4+4 (es decir, 4 veces).
Cargue 02H (base) para registrar B y 03H (exponente) para registrar C -> establezca el registro D en 02H -> Agregue 02H B (es decir, 2) veces -> El registro D ahora contiene 04H -> Agregue 04H B (es decir, 2) veces -> El registro D ahora contiene 08H -> La salida es 08H.
Algoritmo –
- Cargue la base en el registro B y el exponente en el registro C.
- Para comenzar la multiplicación, establezca D en 01H.
- Vaya al paso 7.
- Decrementos C.
- Vaya al paso 3 hasta que el valor de C>0.
- Lleve el puntero de memoria a la siguiente ubicación y almacene el resultado.
- Cargue E con el contenido de B y limpie el acumulador.
- Agregue repetidamente el contenido de D al acumulador E veces.
- Almacene el contenido del acumulador en D.
- Vaya al paso 4.
Programa –
Dirección | Etiqueta | Mnemotécnico | Comentario |
---|---|---|---|
2000H | Base | Byte de datos para la base | |
2001H | Exponente | Byte de datos para exponente | |
2002H | Resultado | resultado del factorial | |
2003H | LXI H, 2000H | Cargar datos de la memoria | |
2006H | MOV B, M | Carga base al registro B | |
2007H | INXH | Incrementar la memoria | |
2008H | MOV C, M | Cargar exponente al registro C | |
2009H | MVI D, 01H | Establezca el registro D en 1 | |
200BH | POTENCIA_LOOP | MULTIPLICAR LLAMADA | Llamada de subrutina para multiplicación |
200EH | DCR C | Decremento C | |
200FH | JNZ POWER_LOOP | Llame a power_loop hasta que C se convierta en 0 | |
2012H | INXH | Incrementar la memoria | |
2013H | MOV M, D | Guardar resultado en la memoria | |
2014H | HLT | Detener | |
2100H | MULTIPLICAR | MOVER E, B | Transferir contenidos de B a E |
2101H | MVI A, 00H | Borrar acumulador para almacenar resultado | |
2103H | BUCLE MULTIPLE | AÑADIR D | Agregar contenido de D a A |
2104H | DCR E | Decremento E | |
2105H | BUCLE MULTIPLE JNZ | Adición repetida | |
2108H | MOV D, A | Transferir contenido de A a D | |
2109H | RETIRADO | Regreso de subrutina |
Explicación –
- Establecer registro B con base y registro C con exponente.
- Configure el registro D con la base llamando a la subrutina MULTIPLY una vez.
- Disminuya C y agregue D a sí mismo B veces llamando a la subrutina MULTIPLY.
- Repita el paso anterior hasta que C llegue a 0 y luego salga del programa.
- El resultado se obtiene en el registro D que se almacena en la memoria