Problema: escriba un programa de nivel de ensamblaje 8086 para generar la secuencia de Fibonacci. La longitud de la secuencia se almacena en el segmento de datos con el valor de desplazamiento de 0. Almacenaremos la secuencia generada en el segmento de datos, desde el valor de desplazamiento de 500.
Nota: Los números generados y las ubicaciones de memoria se representan en su Hexa- Formato decimal.
Ejemplo:
Entrada:
Producción:
Algoritmo:
la secuencia de Fibonacci se genera sumando el (i)-ésimo elemento y el (i-1)-ésimo elemento, y almacenándolo en la (i+1)-ésima posición. Esto es válido dado que las posiciones 1 y 2 se inicializan con 0 y 1 respectivamente. Se deben seguir los siguientes pasos para ejecutar el proceso utilizando las instrucciones del nivel de ensamblaje.
- Mueva el valor almacenado en el desplazamiento 00H a CX (esto actuará como el contador) y disminúyalo en 2 (porque necesitamos cargar explícitamente los primeros 2 elementos de la secuencia)
- Mover 00H a AL
- Mover 500 a SI
- Mover AL a [SI]
- Incremente AL y SI en 1, y almacene el valor de AL en [SI] (con esto, hemos cargado los primeros 2 elementos de la secuencia en la memoria)
- Mover el valor [SI-1] a AL
- Mover [SI]th valor a AH
- Mover 00H a BH
- Añadir BH y AH (resultado almacenado en BH)
- Añadir BH de nuevo con AL
- Incrementar SI en 1
- Almacenar BH en [SI]
- Vuelva al paso 6 hasta que el contador se convierta en 0
- Deténgase
Programa:
Dirección de memoria | Instrucción/Mnemotecnia | Explicación/Comentario |
---|---|---|
2000 | MOV AL, 00H | LA <- 00 |
2002 | MOV SI, 500H | SI <- 500 |
2005 | MOV [SI], AL | [SI] <- 00 |
2007 | AGREGAR SI, 01H | SI <- SI + 01 |
200A | AGREGAR AL, 01H | AL <- AL + 01 |
200C | MOV [SI], AL | SI <- AL |
200E | MOV CX, [0000H] | CX <- 0000 |
2012 | SUB CX, 0002H | CX <- CX – 02 |
~2015 | L1: | ETIQUETA |
2015 | MOV AL, [SI-1] | AL <- [SI – 01] |
2018 | AGREGAR AL, [SI] | AL <- AL + [SI] |
201A | AGREGAR SI, 01H | SI <- SI + 01 |
201D | MOV [SI], AL | [SI] <- AL |
201F | BUCLE L1 | BUCLE L1 CX TIEMPOS |
2021 | HLT | FINAL |
Explicación:
- MOV AL, 00H: AL ahora tiene el primer número de la secuencia
- MOV SI, 500H: hacer que el SI apunte a la ubicación de salida
- MOV [SI], AL: Mover 0 a la primera posición
- ADD SI, 1: Incrementa SI para apuntar a la siguiente ubicación de memoria
- ADD AL, 1: Ahora, AL tiene el segundo elemento de la secuencia
- MOV [SI], AL: Mover 01H a la segunda posición
- MOV CX, [0000H]: mover el valor almacenado en el desplazamiento 0 a CX (contador)
- SUB CX, 02H: Dado que hemos inicializado los primeros 2 elementos de la secuencia, necesitamos disminuir el contador en 2
- L1: Esto define el inicio del ciclo (Se crea una etiqueta)
- MOV AL, [SI-1]: Mueve el elemento en la posición (i-1) a AL
- ADD AL, [SI]: Mueve el (i)th elemento con el (i-1)th elemento ya presente en AL
- ADD SI, 1: Incrementa SI para apuntar a la siguiente posición
- MOV [SI], AL: Almacenar la suma en la nueva posición
- LOOP L1: Las instrucciones entre la etiqueta L1 y esta instrucción LOOP se ejecutan “CX” veces
- HLT: Finaliza el programa
Salida real:
La ubicación de memoria dentro de un círculo (0000) contiene la longitud de la secuencia. Para este programa, es 8.
Los valores resaltados son los elementos de la Secuencia de Fibonacci (en su representación hexadecimal. Por lo tanto, 13 se representa como 0D)
Consulte para: programa 8085 para generar series de Fibonacci
¡Disfruta codificando!
Publicación traducida automáticamente
Artículo escrito por MukkeshMckenzie y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA