Masinakeel

**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.

* x86 – käsustike rühm, mis sai alguse Intel 8086 protsessorist:
:* 286
:* 386
:* 486
:* 586 – Inteli Pentium MMX,I. AMD K6
:* 686 – Inteli Pentium II,III,IV ja Celeron. AMD Athlon XP, Duron
* x86-64 – x86 64-bitine edasiarendus. (Vahel kirjutatakse ka: x86_64)
:* AMD64 – AMD teostus x86-64 -st, ehk AMD haru
:* Intel 64 (EM64T) – Inteli teostus x86-64 -st, ehk Inteli haru.

* Itanium – Inteli Itaniumi arhitektuur. See arhitektuur ei ole ühilduv x86 või x86-64 arhitektuuriga.
:* IA-64 (IA64)

* PPC – ehk PowerPC, algselt kasutati Apple Macintoshides ja IBM-i toodetud tööjaamades ja serverites. Hiljem Apple loobus selle protsessoriperekonna kasutamisest. See on protsessorite rühm ja käsustik, mis on leidnud kasutust ka digitaalvastuvõtjates (Dreambox), mängukonsoolides nagu Nintendo GameCube, Wii, WiiU, Xbox 360 (Microsoft), Cell kujul ka PlayStation 3-s (Sony), samuti on kasutatud seda mitmetel tehiskaaslastel. Apple käitas PowerPC peal OSX-i, IBM AIX-i.
* ARM – pihuarvutites, nutitelefonides ja tahvelarvutites kasutatav protsessoritüüp.

## Vaata ka
*Objektkood