Ultrakevyttä Assembler-ohjelmointia

ITKA203 Käyttöjärjestelmät -kurssin Demo 4b keväällä 2021. Tehdään itse ultrapieni aliohjelma konekielellä.

Paavo Nieminen, paavo.j.nieminen@jyu.fi

Tämä tehtävä syntyi keväällä 2021 vastaukseksi aiemmissa kurssipalautteissa olleisiin toiveisiin: Lisää demoja, ja etenkin konekielestä joku kevyempi välitehtävä kuin syvempään päätyyn heittävä demo 6. No tässä on ensimmäinen yritys tarjota moinen.

Sisällys

Tämän harjoituksen tavoitteet

Päätavoite:

  • Tulee ultrakevyt ensiaskel ohjelmointiin symbolisella konekielellä eli assemblerilla.
  • Eli pehmeä lasku edellisistä seuraavia demoja kohti.

Edelleen käytetään nykyaikaisia työkaluja, joita kurssilla on tähän asti käytetty. Tehdään AMD64 -prosessorin (ts. "x86-64") konekieltä GNU:n assemblersyntaksilla, jota on tähänkin asti nähty debuggerin tulosteissa. Ohjelma käännetään ja linkitetään komentoriviltä GNU:n työkaluilla Jyväskylän yliopiston suorakäyttökoneella (jalava tai halava), jossa sitä myös kokeillaan. Jotta työskentely olisi näppärää, screen-ohjelman, shellin ja tekstieditorin käyttö on hyvä olla hanskassa.

Johdanto

Valmistele hakemisto tätä demoa varten ja hae pieni koodipaketti seuraavin komennoin:

wget https://gitlab.jyu.fi/itka203-kurssimateriaali/itka203-kurssimateriaali-avoin/-/raw/master/2015/demot/mallikoodia/d04b/d04b_paketti.zip
unzip d04b_paketti.zip

Tutki paketista avautunutta runkoa aiemmin opituilla keinoilla (mm. komennot ls, less, tekstieditori). Mukana on Makefile, joka automatisoi käytännössä kaiken. Seuraava komento kääntää, linkittää ja ajaa kokonaan C:llä tehdyn mallikoodin:

make esimerkki

Seuraava komento kääntää, linkittää ja ajaa version, jossa yksi aliohjelmista on toteutettu suoraan konekielellä. Se ei vielä tee toimenpidettä, joka sen pitäisi. Sen vuoksi tuloste on erilainen kuin edellisessä:

make oma

Kyseinen oma kohde on määritelty Makefilessä ensimmäisenä, joten se on oletus ja voit sen sijaan komentaa pelkästään:

make

Kokeile vaikka, niin se on tässä nyt sama asia kuin make oma.

Tehtäväsi on muokata konekielisen aliohjelman tynkä asmvaihtaja.s sellaiseksi, että ohjelma toimii sen kanssa täysin samoin kuin malliesimerkki. Tiedät olevasi perillä, kun komennot make esimerkki ja make oma antavat täsmälleen saman tulosteen.

Mitään muita tiedostoja ei ole tarpeen muuttaa palautustehtävän tekemiseksi.

Muista kääntää ja kokeilla aina pienten muutosten jälkeen, ennen kuin koodi menee hallitsemattomaan tilaan liian monen muutoksen kautta!

Mitä koodiesimerkistä voi ammentaa

Esimerkkikoodi ja sen Makefile on tehty tukemaan ymmärrystä tähän asti käsitellyistä asioista.

Tällaista on tavoiteltu:

Nämä ovat oletuksia. On mielenkiintoista kuulla palautetta demon kevään 2021 opiskelijoilta, jotka ensimmäisenä pääsevät tätä uutta demoa kokeilemaan!

Miten tätä tehtävää lähestytään

Tehtävä on yksinkertainen, mutta vasta sitten, kun palaset yhdistyvät kohdalleen.

Mallivastauksen näkeminen pilaisi sen aika totaalisesti, samoin kuin liian tarkat ohjeet.

Näin ollen on syytä antaa enemmän tai vähemmän lennokkaita vinkkejä:

Uusia tarvittavia tietoja

Tämä asia pitää opetella alustavasti, vaikka se onkin vasta seuraavan demon pääteema:

Pakollinen palautustehtävä

Tästä demosta palautetaan tasan yksi tiedosto nimeltään asmvaihtaja.s jossa on tekemäsi assembler-aliohjelma. Sen pitää toimia yllä olevan ohjeen mukaisesti. Eli tehtäväpaketin Makefile kääntää kokonaisuuden, ja simulaattori tulostaa täysin samoin komennolla make oma kuin komennolla make esimerkki.