250 likes | 422 Views
Konekieli. 00000011. 00000110. 00000000. 00010000. 010001011. 01101100. 10110011. 01011010. 10001010. 00101010. Konekieli. Konekieli on binaarilukuja, jotka prosessori tulkitsee käskyiksi. Konekieli.
E N D
00000011 00000110 00000000 00010000 010001011 01101100 10110011 01011010 10001010 00101010 Konekieli • Konekieli on binaarilukuja, jotka prosessori tulkitsee käskyiksi
Konekieli • Prosessori suorittaa muistissa olevia konekielisiä käskyjä. (Käskyt ovat käytännössä binaarilukuja). • Prosessorin tuntemia käskyjä kutsutaan käskykannaksi. • Eri prosessoreilla on eri käskykanta. • Esim. Applen koneissa käytetyssä prosessorissa on täysin eri käskykanta kuin PC:n prosessoreissa. • Pentium prosessorit sisältävät 80386-prosessorin käskykannan.
Konekieli • Konekielen käskyt ovat yksinkertaisia. • Siirtävät tietoa muistin ja rekisterien välillä • Käsittelevät bittejä tai 8-64 bittisiä lukuja • Uusissa prosessoreissa on mukana matematiikkaprosessori, joka osaa laskea vaativampaa matematiikkaa mm. liukulukulaskentaa.
Konekieli/Assembler • Konekielen käskyt ovat lukuja. • Assemblerissa eli symboolisessa konekielessä käskyille on annettu nimet • Konekieli: 00000011 00000110 00000000 00010000 • Assembler: MOV AX, [1000] • Assembler-ohjelma on käännettävä konekieliseksi ennen käyttöä.
Konekieli/Assembler • Konekieli tarkoittaa prosessorin ymmärtämiä käskyjä. • Jokaisella prosessorityypillä on oma konekielensä. • Ohjelmat on muutettava konekielisiksi ennen niiden suorittamista. • Korkean tason ohjelmointikielillä tehty ohjelma muutetaan konekieliseksi: • Kääntämällä ennen ohjelman suoritusta • Tulkkaamalla ohjelman suorituksen aikana
Käskyn suoritus • Esimerkkinä käsky ADD AX, [1000], joka lisää AX-rekisterissä olevaan arvoon muistipaikassa 1000 olevan luvun. • Prosessori lukee käskyn muistista • Katsoo, tarvitaanko käskyn suorittamiseen dataa muistista • Lukee datan muistista (osoitteesta 1000) • Tulkitsee käskyn • Suorittaa käskyn mukaisen toiminnan eli yhteen laskun • Tallentaa tuloksen eli laittaa summan rekisteriin AX
Käskyn suoritus Muisti • Luetaan käsky muistista ohjelma Prosessori 00000011 00000110 • Luetaan käskyn tarvitsema data muistista 00000000 00010000 25 82 AX • Suoritetaan yhteenlasku 57 +25=82 data add ax,[1000] • Talletetaan tulos 57 1000
Konekieli • Konekieliset käskyt muodostuvat itse käskystä ja operandeista. Esim: ADD AX,[1000] • Käsky on ADD ja operandit AX ja [1000] • Käskyissä on 0-2 operandia.
Konekieli, osoitusmuodot • Välitön osoitus. • Operandi on suoraan jokin luku esim: ADD AX, 10 (a=b+10;) • Tarkoittaa, että lisätään luku 10 • Rekisteriosoitus • Operandissa kerrotaan rekisteri, jota käsitellään. Esim: ADD AX, 10 • Lisätään rekisteriin AX luku 10
Konekieli, osoitusmuodot • Suora osoitus • Kerrotaan suoraan käsiteltävän muistipaikan osoite. Esim: ADD AX, [1000] • Lisätään AX-rekisteriin osoitteessa 1000 oleva arvo. • Huomaa hakasulut
Konekieli, osoitusmuodot • Epäsuora osoitus • Käytetään jotakin rekisteriä kertomaan muistiosoite. Käytössä ovat rekisterit BX, BP, SI, DI. Esim: ADD AX, [BP] • Lisätään AX-rekisteriin arvo, joka on BP-rekisterin osoittamassa paikassa. Jos BP-rekisterissä on luku 1000, lisätään osoitteessa 1000 oleva luku. • Huomaa hakasulut
Konekieli, yleisimmät käskyt • MOV, siirtää tai oikeammin kopioi tietoa • MOV AX, BX kopioi BX-rekisterissä olevan tiedon AX-rekisteriin • MOV AX, [1000] kopioi muistiosoitteesta 1000 luvun AX-rekisteriin • Huomaa, että tieto kopioidaan toisesta operandista ensimmäiseen
Konekieli, yleisimmät käskyt • ADD laskee kaksi arvoa yhteen • ADC laske kaksi arvoa ja Carry-bitin arvon yhteen. • SUB vähennyslasku • SBB vähennyslasku, joka ottaa Carry-bitin mukaan
Konekieli, yleisimmät käskyt • INC lisää arvoa yhdellä • INC AX • INC [1000] • DEC vähentää arvoa yhdellä
Konekieli, yleisimmät käskyt • Loogiset käskyt • AND, OR, XOR suorittavat loogisen operaation kahden luvun bittien välillä. • NOT kääntää luvun bitit, nollat ykkösiksi ja päin vastoin
Konekieli, yleisimmät käskyt • Loogiset käskyt • Siirto ja pyöritys • Siirtävät luvun bittejä vasemmalle tai oikealle • SHL, SHR siirtävät bittejä. Alkupäähän tulee 0 ja loppupäästä bitti siirretään Carry-lippuun
Konekieli, yleisimmät käskyt • MUL kertoo AX tai AL rekisterissä olevan arvon operandin kertomalla luvulla • MUL BX kertoo AX ja BX rekisterin arvot keskenään. Tuloksen alemmat 16 bittiä AX rekisterissä ja ylemmät DX rekisterissä • MUL BL kertoo BL ja AL rekisterien arvot keskenään. Tulos AX-rekisterissä. • IMUL kuten MUL, mutta käytetään etumerkillisten lukujen kertomiseen
Konekieli, yleisimmät käskyt • DIV jaetaan DX:AX-rekistereissä tai AX-rekisterissä oleva arvo • IDIV kuten div, mutta käytetään etumerkillisillä luvuilla
Konekieli, yleisimmät käskyt • Haarautuminen. • Normaalisti prosessori suorittaa muistissa olevia käskyjä järjestyksessä. Haarautumisella poiketaan tästä järjestyksestä • JMP 1000 hyppää osoitteeseen 1000
Konekieli, yleisimmät käskyt • Ehdollinen haarautuminen • Haaraudutaan, jos lippurekisterissä on haluttu tai halutut arvot. • Esim JZ haarautuu, jos Z-lippu on 1 • Ehdollisia haarautumiskäskyjä on useita. Monet näistä tarkoittavat samaa. Esim. JE ja JZ ovat sama käsky. Joskus on loogisempaa käytää JZ-käskyä ja muulloin taas JE-käskyä. • Kaikista on myös käänteinen versio. Esim. JNZ haarautuu, jos Z ei ole 1
Konekieli, yleisimmät käskyt • ja above jz zero set • jae above or equal jna not above • jb below jnae not above or equal • jbe below or equal jnb not below • jc carry set jnbe not below or equal • je equal jnc carry not set • jg greater jne not equal • jge greater or equal jng not greater • jl less jnge not greater or equal • jle less or equal jnl not less • jo overflow set jnle not less or equal • jp parity set jno overflow not set • jpe even parity jns sign not set • jpo odd parity jnz zero not set • js sign set jnp parity not set
Konekieli, yleisimmät käskyt • Ehdollisessa haarautumisessa on merkittävä puute: hyppy voi olla korkeintaan 128 taaksepäin ja 127 eteenpäin. • Ongelma voidaan kiertää käyttämällä JMP-käskyä apuna: Toimiva versio 100 JNE 105 102 JMP 500 105 … Liian pitkä hyppy 100 JE 500
Konekieli, yleisimmät käskyt • CALL aliohjelmakutsu • CALL 1200 kutsuu aliohjelmaa osoitteessa 1200 • Aliohjelmasta palataan RET-käskyllä • CALL laittaa seuraavan käskyn osoitteen (ns. paluuosoite) pinoon ja hyppää aliohjelmaan. RET käsky lukee paluuosoitteen pinosta ja hyppää tähän osoitteeseen.
Konekieli, yleisimmät käskyt • 120 CALL 200 • 123 … • 200 … • RET 123