TIEA325 Tietokonejärjestelmä

Päätetentti

Jani Kurhinen
26.5.2008

Tentissä saa käyttää kaikkia saatavilla olevia staattisia informaatiolähteitä. Kaikenlainen kommunikointi tai muu interaktiivinen toiminta on kielletty.

Tentistä tulee palauttaa kolme tiedostoa, jotka on nimetty seuraavasti:

tiea325PT2_käyttäjätunnut_C.c
tiea325PT2_käyttäjätunnut_ASM.asm
tiea325PT2_käyttäjätunnut_KOMENNOT.txt

Tehtävät tehdään THK:n linux-koneessa jalava.cc.jyu.fi. Kommentoi ohjelmakoodien kaikki rivit!

Tehtävä 1 (6p)

Tee C-kielinen ohjelma, joka kutsuu ulkoista funktiota Fibo(). Funktion esittely ja ohjeet sen käytöstä on tiedostossa tenttifunktiot2.h. Ohjelma ottaa syötteenä yhden kokonaisluvun komentoriviltä käynnistettäessä. Syötteenä saatua lukua käytetään Fibo()-funktion syötteenä. Huomaa, että komentorivin parametri välitetään merkkijonona. Käytä esimerkiksi atoi()-funktiota parametrin muuntamiseen kokonaisluvuksi.

Ulkoisen funktion kutsumisen jälkeen tulee olla seuraavat koodirivit:

//a on int tyypin muuttuja, joka sisältää syötteenä saadun parametrin
//b on int tyypin muuttuja, joka sisältää Fibo()-funktion paluuarvon
printf("%d. fibonaccin luku on %d\n",a,b); 

Tehtävä 2 (6p)

Toteuta edellisen tehtävän Fibo-funktio x86-assemblyllä. Ohjelmakoodin tulee selvitä kaikista arvoista välillä [1,10] ja palauttaa muuten arvo -1. Parametrejä 1 ja 2 vastaavat arvot ovat koodattuina funktioon, muut lasketaan näiden avulla rekursiivisesti.

;
;TEHTÄVÄ 2
;
;Alla on hyvin pelkistetty koodirunko 
;
;
;Keosta varattavat muistilohkot. Kukin label on osoite.
        SECTION .data

;Varsinainen koodi tulee tähän.
        SECTION .text

RETURN:			;Hyppyviite eli label
        mov     esp,ebp ;Palautetaan pino-osoitin,
        pop     ebx     ;EBX sekä
        pop     ebp     ;kantaosoitin alkuperäisiin arvoihin
        ret		;palataan kutsuvaan rutiiniin

	global Fibo	;komponentin entrypointti.
Fibo:                	;Hyppyviite eli label
        push    ebp     ;Vanha basepointteri talteen pinoon
        push    ebx     ;EBX:n arvo talteen
        mov     ebp,esp ;kantaosoittimelle uusi arvo nykyisen pinon päältä

	;Tähän väliin oma koodi

	jmp RETURN	;ehdoton hyppy poistumisrutiiniin

Tehtävä 3 (3p)

Käännä edelliset tehtävät objektitiedostoiksi ja edelleen suoritettavaksi ohjelmaksi (Viimeisessä vaiheessa liität siis kaksi .o-tiedostoa toisiinsa!). Millaisilla komennoilla nämä teet? Komennot eivät saa aiheuttaa varoituksia tai virheilmoituksia.