Mašininis kodas (programavimas)
Mašininis kodas - tai kompiuterio programa, parašyta mašinine kalba. Joje naudojamas tam tikros kompiuterio architektūros instrukcijų rinkinys. Paprastai jis rašomas dvejetainiu kodu. Mašininis kodas yra žemiausio lygio programinė įranga. Kitos programavimo kalbos išverčiamos į mašininį kodą, kad kompiuteris galėtų jas vykdyti.
Instrukcija nurodo procesui, kokią operaciją atlikti. Kiekvieną instrukciją sudaro opkodas (operacijos kodas) ir operandas (-ai). Operandai paprastai yra atminties adresai arba duomenys. Instrukcijų rinkinys - tai kompiuteriui prieinamų opkodų sąrašas. Mašininis kodas yra tai, į ką kompiliuojamas asemblerio kodas ir kitos programavimo kalbos arba kaip jis interpretuojamas.
Programų kūrėjai paverčia kodą į kitą kalbą arba mašininį kodą. Mašininis kodas kartais vadinamas gimtuoju kodu. Jis vartojamas, kai kalbama apie dalykus, kurie veikia tik kai kuriuose kompiuteriuose.
Mašininio kodo rašymas
Mašininis kodas gali būti užrašomas įvairiomis formomis:
- Naudojant kelis jungiklius. Taip sukuriama 1 ir 0 seka. Tai buvo naudojama ankstyvaisiais kompiuterijos laikais. Nuo 1970-ųjų jis nebenaudojamas.
- Naudojant šešiaženklįredaktorių. Tai leidžia vietoj komandos numerio naudoti opkodus.
- Asemblerio naudojimas. Asemblerio kalbos yra paprastesnės nei opcodes. Jų sintaksę suprasti lengviau nei mašinų kalbos, bet sunkiau nei aukšto lygio kalbų. Asembleris pats išverčia pradinį kodą į mašininį kodą.
- Naudojant aukšto lygio programavimo kalbą, programose galima naudoti kodą, kurį lengviau skaityti ir rašyti. Šios programos išverčiamos į mašininį kodą. Vertimas gali vykti keliais etapais. Pirmiausia "Java" programos optimizuojamos į baitkodą. Tada, kai jos naudojamos, jos išverčiamos į mašininę kalbą.
Ankstyvojo minikompiuterio priekinis skydelis su jungikliais mašininiam kodui įvesti
Tipinės mašininio kodo instrukcijos
Instrukcijų rinkinyje paprastai randama daugybė instrukcijų rūšių:
- Aritmetinės operacijos: Sudėtis, atimtis, daugyba, dalybos.
- Loginės operacijos: Konjunkcija, disjunkcija, neigimas.
- Operacijos, atliekamos su atskirais bitais: Bitų perkėlimas į kairę arba į dešinę.
- Operacijos su atmintimi: vertės kopijavimas iš vieno registro į kitą.
- Operacijos, kuriomis lyginamos dvi reikšmės: didesnė už, mažesnė už, lygi.
- Operacijos, kurios sujungia kitas operacijas: sudėtis, palyginimas ir kopijavimas, jei lygi tam tikrai vertei (kaip viena operacija), šuolis į tam tikrą programos tašką, jei registras lygus nuliui.
- Operacijos, veikiančios programos srautą: peršokimas į tam tikrą adresą.
- 32 bitų sveikąjį skaičių konvertuoti į 64 bitų sveikąjį skaičių, slankiojo kablelio reikšmę konvertuoti į sveikąjį skaičių (sutrumpinant).
Daugelyje šiuolaikinių procesorių kai kurioms komandoms naudojamas mikrokodas. Sudėtingesnėms komandoms jis paprastai naudojamas. Tai dažnai daroma su CISC architektūromis.
Instrukcijos
Kiekvienas procesorius ar procesorių šeima turi savo instrukcijų rinkinį. Instrukcijos - tai bitų modeliai, atitinkantys įvairias komandas, kurias galima pateikti mašinai. Taigi instrukcijų rinkinys yra būdingas tam tikrai procesorių, naudojančių (dažniausiai) tą pačią architektūrą, klasei.
Naujesniuose procesorių dizainuose dažnai būna visos pirmtako instrukcijos ir gali būti pridėta papildomų instrukcijų. Kartais naujesniame dizaine nebelieka instrukcijos kodo arba jo reikšmė pakeičiama (paprastai dėl to, kad jis reikalingas naujiems tikslams), o tai turi įtakos kodo suderinamumui; net beveik visiškai suderinamuose procesoriuose kai kurių instrukcijų elgesys gali šiek tiek skirtis, tačiau tai retai kelia problemų.
Sistemos gali skirtis ir kitomis detalėmis, pavyzdžiui, atminties išdėstymu, operacinėmis sistemomis ar periferiniais įrenginiais. Kadangi programa paprastai priklauso nuo tokių veiksnių, skirtingose sistemose paprastai neveikia tas pats mašininis kodas, net jei naudojamas to paties tipo procesorius.
Dauguma instrukcijų turi vieną ar daugiau opkodo laukų. Jie nurodo pagrindinį instrukcijos tipą. Kituose laukuose gali būti nurodytas operandų tipas, adresavimo režimas ir pan. Taip pat gali būti specialių instrukcijų, kurios yra pačiame opkode. Šios instrukcijos vadinamos tiesioginėmis instrukcijomis.
Procesorių projektai gali skirtis ir kitais atžvilgiais. Skirtingos instrukcijos gali būti skirtingo ilgio. Taip pat jos gali būti vienodo ilgio. Jei visos instrukcijos yra vienodo ilgio, dizainą galima supaprastinti.
Pavyzdys
MIPS architektūroje instrukcijos yra 32 bitų ilgio. Šiame skyriuje pateikiami kodo pavyzdžiai. Bendras instrukcijos tipas yra op (operacijos) lauke. Tai didžiausi 6 bitai. J tipo (šuolis) ir I tipo (tiesioginis) instrukcijos yra visiškai nurodytos op. R tipo (registro) instrukcijos apima lauką funct. Jis nustato tikslią kodo operaciją. Šiuose tipuose naudojami šie laukai:
6 5 5 5 5 5 5 6 bitų [ op | rs | rt | rd | rshamt| funct] R-tipas [ op | rs | rt | rt | address/immediate] I-tipas [ op | target address ] J-tipasrs, rt ir rd nurodo registro operandus. shamt nurodo poslinkio dydį. Adreso arba tiesioginio adreso laukuose tiesiogiai nurodomas operandas.
Pavyzdys: sudėkite 1 ir 2 registrus. Rezultatą įrašykite į 6 registrą. Jis užkoduojamas:
[ op | rs | rt | rd | rshamt| funct] 0 1 2 2 6 0 32 dešimtainė 000000 00001 00010 00110 00000 100000 dvejetainėĮkelkite vertę į 8 registrą. Paimkite ją iš atminties ląstelės, esančios 68 ląstelėse po 3 registre nurodytos vietos:
[ op | rs | rt | address/immediate] 35 3 8 68 dešimtainė 100011 00011 01000 00000 00001 000100 dvejetainėPereikite prie adreso 1024:
[ op | tikslinis adresas ] 2 1024 dešimtainė 000010 00000 00000 00000 00000 10000 000000 dvejetainėSusiję puslapiai
- Dvejetainė skaičių sistema
- Kvantiniai kompiuteriai
- Instrukcijų rinkinys
- Kompiuteris su sumažintu instrukcijų rinkiniu
Klausimai ir atsakymai
Klausimas: Kas yra mašininis kodas?
A: Mašininis kodas - tai kompiuterio programa, parašyta mašinine kalba, naudojant tam tikros kompiuterio architektūros instrukcijų rinkinį ir paprastai užrašoma dvejetainiu kodu.
K: Koks yra žemiausias programinės įrangos lygis?
A: Mašininis kodas yra žemiausio lygio programinė įranga.
K: Kaip kompiuteriai vykdo kitas programavimo kalbas?
A: Kitos programavimo kalbos išverčiamos į mašininį kodą, kurį kompiuteris gali vykdyti.
K: Iš ko susideda mašininio kodo instrukcija?
A: Mašininio kodo instrukciją sudaro opkodas (operacijos kodas) ir operandas (-ai). Operandai paprastai yra atminties adresai arba duomenys.
K: Kas yra instrukcijų rinkinys?
A: Instrukcijų rinkinys - tai kompiuteriui prieinamų opkodų sąrašas.
K: Ką programų kūrėjai daro su kodais?
A: Programų kūrėjai kodą paverčia kita kalba arba mašininiu kodu.
K: Kaip kitaip vadinamas mašininis kodas?
A: Mašininis kodas kartais vadinamas vietiniu kodu, kuris vartojamas kalbant apie dalykus, veikiančius tik kai kuriuose kompiuteriuose.