Ultrakevyttä Assembler-ohjelmointia

ITKA203 Käyttöjärjestelmät -kurssin Demo 4b keväällä 2021 ja 2022. 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, kuoren ja tekstieditorin käyttö on hyvä olla hanskassa.

Johdanto

Aiemmin opittua soveltaen 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 paitsi koodin kirjoittamisen vastauksena palautettavaan tiedostoon. 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ä. Voit todeta, että se ei vielä tee toimenpidettä, joka sen pitäisi. Sen näkee siitä, että tuloste on erilainen kuin mitä make esimerkki tulostaa:

make oma

Kyseinen kohde oma 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.

Täsmennyksiä:

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 kevään 2022 opiskelijoilta, kun demo on vasta toista vuotta käytössä!

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

Tehtävä on yksinkertainen, mutta vasta sitten, kun palaset yhdistyvät kohdalleen oppimisen ja kertaamisen kautta.

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 ja tarkoituksellakin yleistasoisia 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.