Ero sivun ”Konekieli” versioiden välillä
[arvioimaton versio] | [katsottu versio] |
p Botti lisäsi: ar:لغة آلة |
→Katso myös: ohjelmointikieli on linkitetty jo aiemmin, pois tästä |
||
(39 välissä olevaa versiota 13 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
[[File:W65C816S Machine Code Monitor.jpeg|thumb|Konekieltä [[W65C816S]] -mikroprosessorin tietokoneen näytössä]] |
|||
'''Konekieli''' on [[tietokone]]en [[suoritin|suorittimen]] ymmärtämä [[Kieli (täsmennyssivu)|kieli]]. Konekieli koostuu sarjasta konekielisiä käskyjä. |
|||
'''Konekieli''' on [[tietokone]]en [[suoritin|suorittimen]] ymmärtämä [[formaali kieli]], joka koostuu sarjasta konekielisiä käskyjä ('''käskysarja''' tai '''käskykanta''', {{k-en|Instruction set}}).<ref>{{Verkkoviite | osoite = http://www.cs.umsl.edu/~sanjiv/classes/cs312/lectures/instruct.pdf | nimeke = Machine Language Instructions | tiedostomuoto = PDF | viitattu = 10.7.2018}}</ref> Konekieli on sarja [[binääri]]siä [[bitti|bittejä]] eli ykkösiä ja nollia, joita tietokone tulkitsee käskyiksi ja operandeiksi.<ref>{{Verkkoviite | osoite = https://www.britannica.com/technology/machine-language | nimeke = Machine language | tekijä = David Hemmendinger | julkaisija = Encyclopaedia Britannica | viitattu = 10.7.2018}}</ref> |
|||
Kaikki mitä tietokone lopulta tekee, muodostuu konekielisistä käskyistä. Konekieli, kuten kaikki mitä tietokone perimmiltään tekee, koostuu |
Kaikki, mitä tietokone lopulta tekee, muodostuu konekielisistä käskyistä. Konekieli, kuten kaikki mitä tietokone perimmiltään tekee, koostuu biteistä eli ykkösistä ja nollista. Konekieli on esitystapa tietokoneohjelmalle, joka on lähinnä bittitasoa. |
||
Suorittimen käyttämä konekieli riippuu sen arkkitehtuurista, esimerkiksi [[x86|x86-arkkitehtuurin]] suorittimella varustettu kone ajaa x86-konekieltä ja [[PowerPC |
Suorittimen käyttämä konekieli riippuu sen arkkitehtuurista, esimerkiksi [[x86|x86-arkkitehtuurin]] suorittimella varustettu kone ajaa x86-konekieltä ja [[PowerPC]]-suorittimella PowerPC-konekieltä. |
||
== |
== Historia == |
||
Ensimmäiset tietokoneet 1940-luvulla [[ohjelmointi|ohjelmoitiin]] konekielellä. Myöhemmin kehitettiin ihmiselle havainnollisempia tapoja esittää konekieliset käskyt. Esimerkiksi symbolinen komento ADD voidaan tulkita konekieliseksi komennoksi 10110111. Syntyi symbolinen konekieli eli [[assembly (ohjelmointikieli)|assembly]]. Havainnollisemmat ohjelmat oli sitten käännettävä erityisellä ohjelmalla, [[ohjelmointikielen kääntäjä|kääntäjällä]], konekieliseksi koodiksi, joka voitiin syöttää |
Ensimmäiset tietokoneet 1940-luvulla [[ohjelmointi|ohjelmoitiin]] konekielellä: ennen [[tallennetun ohjelman tietokone]]tta ohjelmointi tehtiin fyysisesti laitetta muuttamalla.<ref name="plch">{{Verkkoviite | osoite = https://plato.stanford.edu/entries/computing-history/ | nimeke = The Modern History of Computing | tekijä = B. Jack Copeland | ajankohta = 2006 | viitattu = 7.10.2021 | kieli = {{en}} }}</ref> |
||
Myöhemmin kehitettiin ihmiselle havainnollisempia tapoja esittää konekieliset käskyt. Esimerkiksi symbolinen komento <code>ADD</code> voidaan tulkita konekieliseksi komennoksi <code>10110111</code>. Syntyi symbolinen konekieli eli [[assembly (ohjelmointikieli)|assembly]]. Havainnollisemmat ohjelmat oli sitten käännettävä erityisellä ohjelmalla, [[ohjelmointikielen kääntäjä|kääntäjällä]], konekieliseksi koodiksi, joka voitiin syöttää tietokoneeseen sen ymmärtämässä muodossa, eli bitteinä. |
|||
Kullakin konekielellä on oma symbolinen vastineensa, esimerkiksi [[x86 |
Kullakin konekielellä on oma symbolinen vastineensa, esimerkiksi [[x86]]-arkkitehtuurin konekieltä vastaa x86-assembly. |
||
Symbolisenkin konekielen käyttö on vaivalloista, joten yleensä ohjelmoinnissa käytetään korkean tason [[ohjelmointikieli]]ä, esimerkiksi [[C (ohjelmointikieli)|C:tä]], joka [[ohjelmointikielen kääntäjä|käännetään]] konekieleksi tai [[ohjelmointikielen tulkki|tulkataan]] konekielisellä ohjelmalla. Korkean tason ohjelmointikielet mahdollistavat myös saman ohjelman käytön eri konekieltä käyttävissä tietokoneissa. |
Symbolisenkin konekielen käyttö on vaivalloista, joten yleensä ohjelmoinnissa käytetään korkean tason [[ohjelmointikieli]]ä, esimerkiksi [[C (ohjelmointikieli)|C:tä]], joka [[ohjelmointikielen kääntäjä|käännetään]] konekieleksi tai [[ohjelmointikielen tulkki|tulkataan]] konekielisellä ohjelmalla. Korkean tason ohjelmointikielet mahdollistavat myös saman ohjelman käytön eri konekieltä käyttävissä tietokoneissa. |
||
Rivi 18: | Rivi 20: | ||
Konekielinen käsky koostuu kahdesta osasta: |
Konekielinen käsky koostuu kahdesta osasta: |
||
* '''operaatiokoodi''' kertoo mitä tulee tehdä (esimerkiksi yhteenlasku) |
* '''operaatiokoodi''' (''opcode'') kertoo mitä tulee tehdä (esimerkiksi yhteenlasku) |
||
* '''osoitusmuoto''', joka ilmoittaa, mille muistiosoitteille tai suorittimen sisäisille [[rekisteri (tietokonetekniikka)|rekistereille]] operaatio tulee tehdä |
* '''osoitusmuoto''', joka ilmoittaa, mille muistiosoitteille tai suorittimen sisäisille [[rekisteri (tietokonetekniikka)|rekistereille]] operaatio tulee tehdä |
||
Esimerkiksi konekielinen käsky 10110100 10110111 voi merkitä käskynä suorittimelle, että se laskee kahden sisäisen rekisterin sisällöt yhteen ja siirtää tuloksen kolmannen rekisterin osoittamaan muistipaikkaan. Symbolisella konekielellä käsky olisi esimerkiksi ADD A,B,@C |
Esimerkiksi konekielinen käsky 10110100 10110111 voi merkitä käskynä suorittimelle, että se laskee kahden sisäisen rekisterin sisällöt yhteen ja siirtää tuloksen kolmannen rekisterin osoittamaan muistipaikkaan. Symbolisella konekielellä käsky olisi esimerkiksi <code>ADD A,B,@C</code> |
||
Lisäksi käskyissä voi olla etuliitteitä ja valinnaisia osia.<ref name="x86enc">{{Verkkoviite | osoite = http://www.c-jump.com/CIS77/CPU/x86/lecture.html | nimeke = Encoding Real x86 Instructions | viitattu = 29.9.2017 | kieli = {{en}} }}</ref> |
|||
== Muistiarkkitehtuurit == |
|||
== Käskykanta-arkkitehtuuri == |
|||
Konekielinen ohjelma on suoritettaessa tietokoneen keskusmuistissa. [[Harvard-arkkitehtuuri]]ssa ohjelma ja data ovat eri keskusmuisteissa. Tavallista arkkitehtuuria, missä ohjelma ja data ovat samassa keskusmuistissa kutsutaan [[von Neumann -arkkitehtuuri]]ksi. |
|||
Käskykanta-arkkitehtuuri ({{k-en|instruction set architecture}}, ISA) sisältää osoittamismoodit, konekieliset käskyt, tietotyypit, [[Rekisteri (tietokonetekniikka)|rekisterit]], [[muistiarkkitehtuuri]]n, [[Keskeytys (tietotekniikka)|keskeytykset]] ja [[poikkeuskäsittely]]n.<ref>{{Verkkoviite | osoite = https://www.computerhope.com/jargon/i/instset.htm | nimeke = Instruction set | julkaisija = Computer Hope | viitattu = 7.6.2019 | kieli = {{en}} }}</ref> Arkkitehtuuri voidaan toteuttaa myös erityislaatuisella [[mikrokoodi]]lla, jolloin suoritin voidaan osioida aliosiin.<ref>{{Verkkoviite | osoite = https://patents.google.com/patent/US4514803 | nimeke = Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof | julkaisija = Google Patents | viitattu = 7.6.2019 | kieli = {{en}} }}</ref> |
|||
== Käskykantalaajennus == |
|||
Käskykantalaajennuksella tarkoitetaan suorittimen konekielen lisätoimintoja, jotka ovat valinnaisia suorittimen toteutuksessa tai muutoin eivät kuulu osana normaalia käskykantaa. |
|||
Yleisiä esimerkkitapauksia ovat [[SIMD]]-tyyppiset laajennukset kuten [[SSE]] tyypillisten suorittimien käskykantaan. |
|||
==Katso myös== |
==Katso myös== |
||
* [[ |
* [[Muistiarkkitehtuuri]] |
||
* [[ |
* [[Mikro-ohjelma]] |
||
* [[RISC]] |
* [[RISC]] |
||
* [[CISC]] |
* [[CISC]] |
||
* [[VLIW]] |
* [[VLIW]] |
||
== Lähteet == |
|||
{{Viitteet}} |
|||
[[Luokka:Ohjelmointi]] |
[[Luokka:Ohjelmointi]] |
||
[[Luokka:Tietokonetekniikka]] |
[[Luokka:Tietokonetekniikka]] |
||
[[ar:لغة آلة]] |
|||
[[id:Bahasa mesin]] |
|||
[[bn:যান্ত্রিক ভাষা]] |
|||
[[br:Areg ijinenn]] |
|||
[[bg:Машинен език]] |
|||
[[ca:Llenguatge de màquina]] |
|||
[[cs:Strojový kód]] |
|||
[[da:Maskinkode]] |
|||
[[de:Maschinensprache]] |
|||
[[et:Masinkood]] |
|||
[[el:Γλώσσα μηχανής]] |
|||
[[en:Machine code]] |
|||
[[es:Lenguaje de máquina]] |
|||
[[eo:Maŝinkodo]] |
|||
[[fa:زبان ماشین]] |
|||
[[fr:Langage machine]] |
|||
[[gl:Código máquina]] |
|||
[[ko:기계어]] |
|||
[[hi:मशीनी भाषा]] |
|||
[[hsb:Mašinowa rěč]] |
|||
[[hr:Strojni jezik]] |
|||
[[is:Vélamál]] |
|||
[[it:Linguaggio macchina]] |
|||
[[he:שפת מכונה]] |
|||
[[lt:Mašininis kodas (programavimas)]] |
|||
[[hu:Gépi kód]] |
|||
[[ml:യന്ത്രതല ഭാഷ]] |
|||
[[nl:Machinetaal]] |
|||
[[ja:機械語]] |
|||
[[no:Maskinkode]] |
|||
[[pl:Język maszynowy]] |
|||
[[pt:Código de máquina]] |
|||
[[ru:Машинный код]] |
|||
[[simple:Machine code]] |
|||
[[sk:Strojový kód]] |
|||
[[sl:Strojna koda]] |
|||
[[sv:Maskinkod]] |
|||
[[th:ภาษาเครื่อง]] |
|||
[[vi:Ngôn ngữ máy]] |
|||
[[tr:Makine dili]] |
|||
[[uk:Машинний код]] |
|||
[[ur:آلاتی زبان]] |
|||
[[zh:机器语言]] |
Nykyinen versio 11. joulukuuta 2023 kello 12.53
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/W65C816S_Machine_Code_Monitor.jpeg/250px-W65C816S_Machine_Code_Monitor.jpeg)
Konekieli on tietokoneen suorittimen ymmärtämä formaali kieli, joka koostuu sarjasta konekielisiä käskyjä (käskysarja tai käskykanta, engl. Instruction set).[1] Konekieli on sarja binäärisiä bittejä eli ykkösiä ja nollia, joita tietokone tulkitsee käskyiksi ja operandeiksi.[2]
Kaikki, mitä tietokone lopulta tekee, muodostuu konekielisistä käskyistä. Konekieli, kuten kaikki mitä tietokone perimmiltään tekee, koostuu biteistä eli ykkösistä ja nollista. Konekieli on esitystapa tietokoneohjelmalle, joka on lähinnä bittitasoa.
Suorittimen käyttämä konekieli riippuu sen arkkitehtuurista, esimerkiksi x86-arkkitehtuurin suorittimella varustettu kone ajaa x86-konekieltä ja PowerPC-suorittimella PowerPC-konekieltä.
Historia
[muokkaa | muokkaa wikitekstiä]Ensimmäiset tietokoneet 1940-luvulla ohjelmoitiin konekielellä: ennen tallennetun ohjelman tietokonetta ohjelmointi tehtiin fyysisesti laitetta muuttamalla.[3]
Myöhemmin kehitettiin ihmiselle havainnollisempia tapoja esittää konekieliset käskyt. Esimerkiksi symbolinen komento ADD
voidaan tulkita konekieliseksi komennoksi 10110111
. Syntyi symbolinen konekieli eli assembly. Havainnollisemmat ohjelmat oli sitten käännettävä erityisellä ohjelmalla, kääntäjällä, konekieliseksi koodiksi, joka voitiin syöttää tietokoneeseen sen ymmärtämässä muodossa, eli bitteinä.
Kullakin konekielellä on oma symbolinen vastineensa, esimerkiksi x86-arkkitehtuurin konekieltä vastaa x86-assembly.
Symbolisenkin konekielen käyttö on vaivalloista, joten yleensä ohjelmoinnissa käytetään korkean tason ohjelmointikieliä, esimerkiksi C:tä, joka käännetään konekieleksi tai tulkataan konekielisellä ohjelmalla. Korkean tason ohjelmointikielet mahdollistavat myös saman ohjelman käytön eri konekieltä käyttävissä tietokoneissa.
Konekieliset käskyt
[muokkaa | muokkaa wikitekstiä]Konekielinen käsky on bittikuvio, jolla on suorittimelle erityismerkitys. Suoritin hakee konekieliset käskyt yksi kerrallaan keskusmuistista ja toimii niiden ohjeiden perusteella. Konekielisen käskyn tulkinta riippuu suorittimen laitteistosta (elektroniikka) ja suorittimen sisäisestä ohjelmasta (mikrokoodi).
Konekielinen käsky koostuu kahdesta osasta:
- operaatiokoodi (opcode) kertoo mitä tulee tehdä (esimerkiksi yhteenlasku)
- osoitusmuoto, joka ilmoittaa, mille muistiosoitteille tai suorittimen sisäisille rekistereille operaatio tulee tehdä
Esimerkiksi konekielinen käsky 10110100 10110111 voi merkitä käskynä suorittimelle, että se laskee kahden sisäisen rekisterin sisällöt yhteen ja siirtää tuloksen kolmannen rekisterin osoittamaan muistipaikkaan. Symbolisella konekielellä käsky olisi esimerkiksi ADD A,B,@C
Lisäksi käskyissä voi olla etuliitteitä ja valinnaisia osia.[4]
Käskykanta-arkkitehtuuri
[muokkaa | muokkaa wikitekstiä]Käskykanta-arkkitehtuuri (engl. instruction set architecture, ISA) sisältää osoittamismoodit, konekieliset käskyt, tietotyypit, rekisterit, muistiarkkitehtuurin, keskeytykset ja poikkeuskäsittelyn.[5] Arkkitehtuuri voidaan toteuttaa myös erityislaatuisella mikrokoodilla, jolloin suoritin voidaan osioida aliosiin.[6]
Käskykantalaajennus
[muokkaa | muokkaa wikitekstiä]Käskykantalaajennuksella tarkoitetaan suorittimen konekielen lisätoimintoja, jotka ovat valinnaisia suorittimen toteutuksessa tai muutoin eivät kuulu osana normaalia käskykantaa.
Yleisiä esimerkkitapauksia ovat SIMD-tyyppiset laajennukset kuten SSE tyypillisten suorittimien käskykantaan.
Katso myös
[muokkaa | muokkaa wikitekstiä]Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ Machine Language Instructions (PDF) cs.umsl.edu. Viitattu 10.7.2018.
- ↑ David Hemmendinger: Machine language Encyclopaedia Britannica. Viitattu 10.7.2018.
- ↑ B. Jack Copeland: The Modern History of Computing plato.stanford.edu. 2006. Viitattu 7.10.2021. (englanniksi)
- ↑ Encoding Real x86 Instructions c-jump.com. Viitattu 29.9.2017. (englanniksi)
- ↑ Instruction set Computer Hope. Viitattu 7.6.2019. (englanniksi)
- ↑ Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof Google Patents. Viitattu 7.6.2019. (englanniksi)