Diferencia entre revisiones de «Fibonacci.fma»
De Wiki Asqueados
() |
|||
(No se muestran 45 ediciones intermedias de 5 usuarios) | |||
Línea 1: | Línea 1: | ||
− | <nowiki> | + | Programa de prueba de las instrucciones aritméticas. |
+ | |||
+ | Calcula la sucesión de Fibonacci. | ||
+ | |||
+ | == Código == | ||
+ | |||
+ | |||
+ | <nowiki> | ||
LDI 1,1 ; 0 constante 1 | LDI 1,1 ; 0 constante 1 | ||
− | LDI 300,C ; | + | LDI 300,2 ; 2 contador A |
− | LDI 400,D ; | + | LDI 301,3 ; 4 contador B |
+ | LDI 302,C ; 6 contador de escritura | ||
+ | LDI 400,D ; 8 límite | ||
− | LD | + | LD 1,A ; A |
− | + | LD 1,B | |
− | + | ST A,2 | |
− | ADD A,B | + | ST B,3 |
+ | |||
+ | ADD A,B ;E | ||
+ | ST B,C | ||
+ | ADD 1,2 | ||
+ | ADD 1,3 | ||
ADD 1,C | ADD 1,C | ||
− | + | LD 2,A | |
− | + | LD 3,B | |
− | + | JGE D,C,E | |
LDI CACA,B | LDI CACA,B | ||
ST B,C | ST B,C | ||
+ | </nowiki> | ||
+ | |||
+ | == Algoritmo == | ||
+ | |||
+ | Cargamos 1 en A y en B. El registro 2 llevará la posición de A, el 3 la de B y el registro C la posición de escritura. En cada iteración se suma A y B, se guarda el resultado en C se incrementan los "punteros" 2, 3 y C, y se vuelven a cargar los valores de A y B. | ||
+ | |||
+ | En seudocódigo: | ||
+ | |||
+ | <nowiki> | ||
+ | A=1 | ||
+ | B=1 | ||
+ | [2]=A | ||
+ | [3]=B | ||
+ | salto: | ||
+ | B=A+B | ||
+ | [C]=B | ||
+ | 2++ | ||
+ | 3++ | ||
+ | C++ | ||
+ | A=[2] | ||
+ | B=[3] | ||
+ | si C<D goto salto | ||
</nowiki> | </nowiki> |
Revisión actual del 03:24 22 ene 2009
Programa de prueba de las instrucciones aritméticas.
Calcula la sucesión de Fibonacci.
Código
LDI 1,1 ; 0 constante 1 LDI 300,2 ; 2 contador A LDI 301,3 ; 4 contador B LDI 302,C ; 6 contador de escritura LDI 400,D ; 8 límite LD 1,A ; A LD 1,B ST A,2 ST B,3 ADD A,B ;E ST B,C ADD 1,2 ADD 1,3 ADD 1,C LD 2,A LD 3,B JGE D,C,E LDI CACA,B ST B,C
Algoritmo
Cargamos 1 en A y en B. El registro 2 llevará la posición de A, el 3 la de B y el registro C la posición de escritura. En cada iteración se suma A y B, se guarda el resultado en C se incrementan los "punteros" 2, 3 y C, y se vuelven a cargar los valores de A y B.
En seudocódigo:
A=1 B=1 [2]=A [3]=B salto: B=A+B [C]=B 2++ 3++ C++ A=[2] B=[3] si C<D goto salto