See artikkel vajab toimetamist. (Aprill 2006) Palun aita artiklit toimetada. (Kuidas ja millal see märkus eemaldada?)
See artikkel ootab keeletoimetamist. (Detsember 2017) Kui oskad, siis palun aita artiklit keeleliselt parandada. (Kuidas ja millal see märkus eemaldada?)
Masinakeelemonitor monoplaatarvutis WDC 65816/65802, monitor näitab disassemblerit, protsesside registrit ja mälutõmmiseid

Masinakeel (ka masinkeel, masinkood, masinakood) on programmeerimiskeel, mis on arvuti protsessorile otseselt arusaadav.

Masinakeel ei ole inimestele kergesti loetav, kuid mõnel juhul on seda võimalik loetavaks teha dekompilaatori või disassembleri abil. Teistes programmeerimiskeeltes kirjutatud programmid kas tõlgitakse masinakeelde või käivitatakse masinakeeles kirjutatud interpretaatori abil, otse masinakeeles programmeeritakse erandjuhtudel.

Tavaliselt töötleb masinakeelt masin (näiteks mikroprotsessor), kuid seda võidakse töödelda ka tarkvaraliselt mõnel teisel, mitteühilduval protsessoril emulaatori abil. Spetsiaalselt masinakeeleinterpretaatori (baitkoodi virtuaalmasina) loodud "masinkoodi" nimetatakse baitkoodiks (vt Java baitkood).

Tehniline selgitus

Kuigi masinakood võib tunduda sarnasena assemblerkeelega, on need siiski erinevad keeled. Assemblerkeelne lähtekood koosneb protsessori masinakäskude mnemokoodidest ja kahendsüsteemi teisendatavatest operandidest, aga masinakood koosneb ainult kahendarvudest.

Igal protsessori tüübil on oma masinakeel, mis võib teiste tüüpidega osaliselt kattuda. Kui protsessor A mõistab täielikult protsessori B masinakeelt, öeldakse, et A on B-ga ühilduv. Seejuures B ei pruugi ühilduda A-ga, A võib teada koode, mida B ei tea. Samuti võivad kaks protsessorit ühilduda kolmandaga, aga mitte omavahel. Protsessoriga ühilduv assembler on assembler, mis tõlgib assemblerkeeles programmi protsessori masinakeelde.

Masinakeele "sõnu" nimetatakse masinakäskudeks. Assemblerkeelne või masinkoodis arvutiprogramm on pikk nimekiri masinakäskudest, mida protsessor täidab. Vanemad protsessorid täitsid masinakäske ainult jadamisi, kuid osa tänapäevaseid protsessoreid suudab täita ka mitut käsku samaaegselt, seega kiiremini. Programmi masinakoodi ei pruugi protsessor täita järjestikku, vaid võib käskude täitmisel hüpata ühest kohast teise vastavalt täidetavas programmis olevatele siirdekäskudele või vastavalt sündmustele (välisseadmetelt saadud katkestussignaalide järgi).

Protsessorite arhitektuurid ja masinakäsud

Mõnes masinakeeles on kõik käsukoodid alati võrdse bittide arvuga, mõnes mitte. RISC-protsessorite arhitektuuris on käsukoodid alati ühe pikkusega, CISC-protsessoritel käsukoodide pikkus varieerub. Tänapäeval on enamik CISC-protsessoreid sisemiselt RISC-arhitektuuriga: kuigi programmid annavad neile CISC-käske, transleeritakse need protsessoris RISC-käskudeks. Sellised on näiteks Pentium 2 seeria protsessorid. Väliselt on protsessorid CISC-tüüpi tagasiühilduvuse saavutamiseks vanemate protsessoritega.

  • 286
  • 386
  • 486
  • 586 – Inteli Pentium MMX,I. AMD K6
  • 686 – Inteli Pentium II,III,IV ja Celeron. AMD Athlon XP, Duron
  • AMD64 – AMD teostus x86-64 -st, ehk AMD haru
  • Intel 64 (EM64T) – Inteli teostus x86-64 -st, ehk Inteli haru.
  • IA-64 (IA64)

Vaata ka