Published on Wednesday, March 12th, 2008 at 2:22 pm

Doncs aquest matí he anat al centre metge (de Benimaclet) i a l’Hospital Clínic a fer unes gestions i quan he acabat m’ha entrat una gossera enorme d’anar-me’n a classe i m’he dit: “em quede a casa a estudiar”.

Qualsevol altra persona amb bona salut mental s’hauria encès la televisió i hauria mirat algun programa de debats d’aquests que fan pels matins, que segur que deuen d’estar d’allò més “interessants” després de les eleccions. Però jo no he fet això!

Com que m’estava pelant la classe de FCO m’han entrat remordiments i m’he dit: “anem a fer exercicis” i m’he posat a fer exercicis d’assemblador. Doncs bé, farà una estoneta, quan ja estava cansat de fer exercicis (després de quasi dues hores) m’ha vingut al cap de provar de fer algun programeta en assemblador i açò és el que he fet (imagine que dels que llegiu el bloc ningú entendreu que collons fa, però és igual, és una cosa MOLT friki).

.data
itera: .byte 0×0A #numero de iteracions (sense comptar a[1] i a[2])
.data 0×10010010
vector: .byte 0×00, 0×01 #vector que representa la successio.
#els primers valors corresponen a[1] = 0 i a[2] = 1.

.text
.globl __start

__start:
la $4, itera
la $7, vector
lb $3, 1($7) # a[n-1]. a[2] = 1
lb $2, 0($7) # a[n-2]. a[1] = 0
addi $7, $7, 2 # comencem a afegir a partir de la tercena pos.
lb $4, 0($4) # iteracions
addi $6, $0, 0 # contador

bucle:
add $5, $2, $3 # a[n] = a[n-1] + a[n-2]
add $2, $0, $3
add $3, $0, $5
addi $6, $6, 1 #incrementa comptador
sb $5, 0($7)
addi $7, $7, 1
bne $6, $4, bucle #si encara no hem fet totes les iter. repetim…

.end

I què és el què fa la cosa aquesta? Doncs va omplint un vector en memòria on cada element és un terme de la successió de Fibonacci (0,1,1,2,3,5,8,13, …). Ni més ni menys.

La idea era fer una cosa semblant a aquesta feta en C:

#include <stdio.h>
#define MAX_ITER 10

int main(){
int vector[MAX_ITER+2], i;
vector[0] = 0;
vector[1] = 1;
printf(”%d %d “, vector[0], vector[1]);
i = 2;
while(i != MAX_ITER+2){
vector[i] = vector[i-1] + vector[i-2];
printf(”%d “, vector[i]);
i++;
}
putchar(’\n’);
return 0;
}

Ací tenim el resultat de l’execució del programa en assemblador:

Descarrega’t el codi font i juga una poc amb ell (fixa’t en que el vector és de bytes!). El llenguatge assemblador és per al processador MIPS R2000 així que necessitaràs un simulador. Jo utilitze el Spim, està disponible tant per a Windows com per a Linux (encara que jo utilitze la versió de Windows sobre el Wine).

Related Posts

2 Responses to “Frikisme 100%”

  1. Si Joan, ho he entés perfectament XDDDD, es molt hard! No t’acostumbres a no assistir a classe que mos conegem eh? Que tu tens antecedents desde primer de batxiller amb aquell día que teniem que entregar un treball i no vas anar a informàtica… XD

    Un saludet.

  2. Pa que després hem diguem que kant és incomprensible.

    No més he pillat allò de Fibonaci, però per a fer això em basta una calculadora i ganes de perdre el temps.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>