Diferencia entre revisiones de «Fibonacci.fma»

De Wiki Asqueados
Saltar a: navegación, buscar
 
()
 
(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  ; 2 contador
+
LDI 300,2  ; 2 contador A
LDI 400,D  ; 4 límite
+
LDI 301,3  ; 4 contador B
 +
LDI 302,C  ; 6 contador de escritura
 +
LDI 400,D  ; 8 límite
  
LD C,A  ; 6 Comienzo del bucle
+
LD 1,A  ; A
ADD 1,C
+
LD 1,B
LD C,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
ST B,C
+
LD 2,A
CMP D,C
+
LD 3,B
JGE 6
+
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