Kompiuterinė kalba

**Kompiuterinė kalba** arba **mašininis kodas** – programavimo kalba, kurią tiesiogiai, be interpretatoriaus, supranta kompiuteris ir vykdo ja užrašytas komandas. Tai pati seniausia programavimo kalba, ir dažnai žemiausio lygio, nors dabartiniai procesoriai dar turi ir mikrokodo lygmenį. Tik vėliau sukurtos kitos programavimo kalbos, kurių tekstą galima automatiškai išversti į mašininį kodą (sukompiliuoti).

## Skirtumai nuo asemblerio
Kiek aukštesnio lygio programavimo kalba yra asemblerio kalba. Asembleryje operacijos užrašomos žmogui supratamesnėmis ir labiau įsimintinomis raidėmis, ne dvejetainiu kodu. 

Pavyzdžiui, Intel Intellec 4 procesorius turi aštuonis vidinius registrus (kaipo ir „kintamuosius“). Komanda kopijuoti vieno registro turiniui į kitą užrašoma kaip mov r1,r2 (čia r1, r2 – registrų vardai). Asemblerio kalboje atskirą reikšmę turintys komandos fragmentai (šiuo atveju registrų vardai) vis dar užrašomi atskirai. Mašininiame kode ši komanda yra vientisas dvejetainis skaičius: 01DDDSSS, kur SSS yra dvejetainis šaltinio numeris (trys bitai), o DDD – paskirties registro numeris (pavyzdžiui, 01001100) Tokią komandą galima surinkti valdymo pulto jungikliais.

Asemblerio kalboje visgi galima skaičius užrašyti norima skaičiavimo sistema (dešimtaine, dvejetaine, šešioliktaine), vietoje mašininių adresų (kurie yra skaičiai) naudoti raidinius vardus, tiesiogiai (ne ASCII) įvesti programai reikalingus teksto fragmentus. Mašininėje kalboje viso to nėra. Asemblerio programą įprastai galima parengti vykdymui bet kurioje kompiuterio atminties vietoje. Mašininio kodo dažniausiai taip „nepastumdysi“: visos komandos turi savo adresus kurie yra skaičiai, ir būtent tokie adresai turi būti nurodyti visur kur būtina perduoti valdymą (sąlyga, ciklas).

## Taikymo sritis
Mašininis kodas reikalingas su kompiuteriu dirbant labiau elektroniniame nei programavimo lygyje (pavyzdžiui, įvedant pirmąją programą jungikliais ir mygtukais). Pirmieji pramoniniai ir vėliau mėgėjiški kompiuteriai dažnai turėdavo „techninį pultą“, skirtą stebėti ir nustatyti vykdomos komandos ar duomenų adresą, kodą, turinį – viską dvejetainėje sistemoje ir mašininio kodo pavidalu. Būdavo mygtukas procesoriaus komandoms pažingsniui vykdyti, kitas – surinktai reikšmei nurodytu adresu užrašyti. To pulto dažnai reikėdavo kompiuteriui pirmąkart paleisti, kol dar jame nebūdavo jokios galimos vykdyti programos. Tačiau pirmoji programa gali būti perskaityta ir iš ilgalaikės, išjungiant neprarandamos atminties. Šaltinyje  galima matyti tokį pultą mėgėjiškam Микро-80 kompiuteriui.

Į mašininį kodą vis dar tenka kiek tai gilintis kuriant naujus procesorius, jų komandų sistemas, nes tai vienintelė programavimo kalba kurią naujos architektūros kompiuteris supranta savaime ir vos pagamintas. 

## Mikrokodas

Sudėtingi (šiuolaikiniai) procesoriai dažnai turi ir dar vieną, už mašininį kodą žemesnį programavimo lygmenį. Juo pačiame procesoriuje programuojamos komandos, kurių išpildymas tiesiog elektronikos grandinėmis būtų pernelyg sudėtingas. Tačiau nors mikrokodas prireikus gali būti keičiamas ir jau pagamintam procesoriui, juo visgi programuojamas paties procesoriaus darbas, jo komandų sistema. Mikrokodas gali būti keičiamas jei aptinkama procesoriaus programavimo klaidų – nereikia keisti paties procesoriaus ir greičiausiai viso kompiuterio. Pavyzdžiui, taip buvo užtaisytos Spectre, Meltdown saugumo spragos. Mikrokodas įgalina mažiau galimybių turintį procesorių imituoti galingesnio procesoriaus darbą (didesnis žodžio ilgis, daugiau branduolių ir pan.), taip pasiekiant daugiau suderinamumo. Įprastiniam programavimui mikrokodas sunkiai panaudojamas nes būdamas glaudžiai susijęs su konkrečia elektronika dažniausiai be perrašymo netinka jokiam kitam procesoriui. Mikrokodo instrukcijos atrodo maždaug taip:
* Sujunk registrą 1 su aritmetinio įrenginio puse A
* Sujunk registrą 7 su aritmetinio įrenginio puse B
* Nustatyk aritmetinį įrenginį atlikti sudėties operaciją
* Užrašyk aritmetinio įrenginio rezultatą į registrą 1
ir panašiai. Mikrokodui būdingos labai „plačios“ instrukcijos,  50 - 128 bitai ir daugiau, nes reikia apimti visus procesoriaus vidinius registrus ir kitas susijusias elektros grandines. Daugelis Intel procesorių, pradedant nuo Pentium Pro, turi mikrokodo lygmenį kurį galima programiškai keisti. Tą taip pat galima padaryti AMD Opteron procesoriams. Intel mikrokodo pakeitimai yra užšifruoti. AMD jie nėra užšifruoti, tačiau dokumentuoti taip pat nėra.

## Šaltiniai