Problema: escriba un programa en lenguaje ensamblador para calcular el factorial de un número utilizando el microprocesador 8085.
Ejemplo –
Input : 04H Output : 18H as 04*03*02*01 = 24 in decimal => 18H
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×3 equivale a 4+4+4 (es decir, 3 veces).
Cargue 04H en el registro D -> Agregue 04H 3 veces -> El registro D ahora contiene 0CH -> Agregue 0CH 2 veces -> El registro D ahora contiene 18H -> Agregue 18H 1 vez -> El registro D ahora contiene 18H -> La salida es 18H
Algoritmo –
- Cargue los datos en el registro B
- Para iniciar la multiplicación ajuste D a 01H
- Saltar al paso 7
- Decrementa B para multiplicar el número anterior
- Saltar al paso 3 hasta el valor de B>0
- Lleve el puntero de memoria a la siguiente ubicación y almacene el resultado
- Cargue E con contenido de B y despeje el acumulador
- Agregue repetidamente el contenido de D al acumulador E veces
- Almacene el contenido del acumulador en D
- Ir al paso 4
Dirección | Etiqueta | Mnemotécnico | Comentario |
---|---|---|---|
2000H | Datos | Byte de datos | |
2001H | Resultado | resultado del factorial | |
2002H | LXI H, 2000H | Cargar datos de la memoria | |
2005H | MOV B, M | Cargar datos en el registro B | |
2006H | MVI D, 01H | Establecer registro D con 1 | |
2008H | FACTORIAL | MULTIPLICAR LLAMADA | Llamada de subrutina para multiplicación |
200BH | DCR B | Decremento B | |
200CH | JNZ FACTORIAL | Llame al factorial hasta que B se convierta en 0 | |
200FH | INXH | Incrementar la memoria | |
2010H | MOV M, D | Guardar resultado en la memoria | |
2011H | HLT | Detener | |
2100H | MULTIPLICAR | MOVER E, B | Transferir contenido de B a C |
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 –
- Primero configure el registro B con datos.
- Configure el registro D con datos llamando a la subrutina MULTIPLY una vez.
- Disminuya B y agregue D a sí mismo B veces llamando a la subrutina MULTIPLY ya que 4*3 es equivalente a 4+4+4 (es decir, 3 veces).
- Repita el paso anterior hasta que B llegue a 0 y luego salga del programa.
- El resultado se obtiene en el registro D que se almacena en la memoria