Viikkoharjoitus 6

Viimeisissä harjoituksissa yhdistelemme C:tä ja assemblyä sekä luemme ohjelmalle annettuja käynnistysparametreja.

;TIEA325
;Jani Kurhinen
;23.4.2008
;
;C-kielisessä ohjelmassa ohjelman käynnistysparametrit voidaan lukea
;argc ja argv-muuttujista. Assemblyssä ne löytyvät pinosta kuten muutkin
;parametrit. HUOM: argv[] on merkkijono. Jos halutaan numeerinen 
;parametri, on syytä käyttää vakiokirjaston atoi-funktiota.
;
;Alla oleva koodi tarkastaa parametrien määrän ja muuntaa toiselle
;parametrille numeerisen arvon merkkijonosta.
;Huom: kantaosoittimen offset riippuu siitä, mitä olet tallentanut 
;pinoon ohjeman käynnistyessä. Esimerkissä sinne on tallennettu kolme
;arvoa.
; 

        mov     eax,[ebp+16]    ;argc akkuun
        cmp     eax,2   ;argc == 2 ??   
        jne     _HELP	;virheellinen määrä parametrejä
        mov     ebx,[ebp+20];argv[0]rekisteriin 
        push    dword [ebx+4];argv[1] pinoon
        call    atoi
        add     esp,4
        mov     [ebp],eax;paluuarvo paikalliseen muuttujaan


Tehtävä 1

Tee alla olevan kaltainen C-ohjelma sekä yllä olevaa esimerkkikoodia hyödyntävä assembly-rutiini, joka kutsuu fibonaccia käyttäjän antamalla arvolla.

//TIEA325
//Jani Kurhinen
//23.4.2008
//fibonacci.c
//
//käännä aliohjelma komennolla gcc -m32 -c fibonacci.c
//

	int fibonacci(int i)
	{       
	       if (i==1 || i==2)
	         return 1
	       return finonacci(i-1) + fibonacci(i-2);
	}