Konekieli
Konekieli 00000110 00000000 00010000 010001011 01101100 00000011 10110011 01011010 10001010 00101010 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 Luetaan käsky muistista ohjelma Luetaan käsky muistista Prosessori 00000011 00000110 00000000 Luetaan käskyn tarvitsema data muistista 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