TIEA325 Tietokonejärjestelmä

Päätetentti

Jani Kurhinen
8.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:

tiea325PT1_käyttäjätunnut_C.c
tiea325PT1_käyttäjätunnut_ASM.asm
tiea325PT1_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 TaulukonSumma() Funktion esittely ja ohjeet sen käytöstä on tiedostossa tenttifunktiot.h. Alusta ohjelmassasi taulukko arvoilla [1,1,2,3,5] ja välitä tämä taulukko aliohjelmalle parametrina. Funktion kutsumisen jälkeen ohjelman tulee sisältää seuraavat ohjelmarivit.

//a on int tyypin muuttuja, joka sisältää TaulukonSumma()-funktion paluuarvon
printf("Taulukon lukujen summa on %d\n",a); 

Tehtävä 2 (6p)

Toteuta edellisen tehtävän TaulukonSumma-funktio x86-assemblyllä. Ohjelmakoodin tulee selvitä kaikista taulukoista, joiden pituus on vähintään yksi.

;
;TEHTÄVÄ 2
;
;Käytä rekistereitä eax, ebx, ecx ja edx paikalliseen datan käsittelyyn
;pinoon sijoitettavien paikallisten muuttujien sijaan. 
;
;Alla on hyvin pelkistetty koodirunko 
;
;
;Keosta varattavat muistilohkot. Kukin label on osoite.
        SECTION .data

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


        global TaulukonSumma  ;komponentin entrypointti.
TaulukonSumma:                ;Hyppyviite eli label


	ret

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.