Strojna koda – definicija, delovanje in nabor ukazov računalniške arhitekture
Strojna koda: definicija, delovanje in nabor ukazov računalniške arhitekture, razumevanje binarne oblike, opcode in operandi za razvoj in optimizacijo programske opreme
Strojna koda je računalniški program, napisan v strojnem jeziku. Uporablja nabor ukazov določene računalniške arhitekture. Običajno je zapisana v binarni obliki. Strojna koda je najnižja raven programske opreme. Drugi programski jeziki so prevedeni v strojno kodo, da jih računalnik lahko izvaja.
Navodilo pove procesu, katero operacijo naj izvede. Vsako navodilo je sestavljeno iz opcode (koda operacije) in operandov. Operandi so običajno pomnilniški naslovi ali podatki. Nabor navodil je seznam opcijskih kod, ki so na voljo v računalniku. Strojna koda je tisto, v kar se sestavljena koda in drugi programski jeziki predelajo ali interpretirajo.
Ustvarjalci programov spreminjajo kodo v drug jezik ali strojno kodo. Strojna koda se včasih imenuje izvirna koda. To se uporablja, ko govorimo o stvareh, ki delujejo le na nekaterih računalnikih.
Galerija slik
3 SlikeKako deluje strojna koda
Procesor izvaja strojno kodo z zanko, imenovano fetch-decode-execute (pridobi-dekodiraj-izvedi). Najprej procesor prebere (fetch) naslednje navodilo iz pomnilnika, nato razčleni (decode) opcode in operande ter na koncu izvede (execute) zahtevano operacijo (npr. aritmetično operacijo, prenos podatkov ali skok v drugo lokacijo). Za izvajanje so ključni elementi CPU: aritmetično-logična enota (ALU), registri in upravljalna enota.
Struktura navodil
Navodila so lahko različnih oblik in dolžin. Nekatera so kratka in imajo fiksno dolžino (pogosto pri RISC arhitekturah), druga pa so spremenljive dolžine (kot pri nekaterih CISC arhitekturah). Pogoste komponente navodila so:
- Opcode: določa vrsto operacije.
- Registrski operandi: referenca na procesorske registre.
- Spominski operandi: naslovi v glavnem pomnilniku ali pomnilniški pomik.
- Imediate vrednosti: neposredni podatki, vgrajeni v navodilo.
- Flaški in pogojne kode: določajo vedenje skokov in pogojev.
Nadzor naslavljanja in načini dostopa
Navodila uporabljajo različne načine dostopa do podatkov (adresiranja): neposredno (immediate), neposredno naslovljeno, indeksno, z registrskim pomikom ali prek kazalcev. Ti načini določajo, kako se izračuna lokacija podatkov in kako jih procesor prebere ali zapiše.
Predstavitev v pomnilniku
V pomnilniku je strojna koda običajno zapisana kot zaporedje bajtov. Človek jo pogosto prikazuje v heksadecimalni obliki (npr. 0xB8 0x01 0x00 ...), ker je to berljivejše od dolge vrstice ničel in enic. Pomembna lastnost je endianness (big-endian ali little-endian), ki določa vrstni red bajtov pri večbajtnih vrednostih.
Arhitekture in prenosljivost
Strojna koda ni prenosljiva med različnimi računalniškimi arhitekturami — binarna datoteka, prevedena za eno arhitekturo (npr. x86), na drugi arhitekturi (npr. ARM) ne bo delovala. Zato obstajajo različni nabori ukazov (ISA), ki opredeljujejo, katera navodila in formati so podprti. Nekatere razlike med ISA vključujejo število in vlogo registrov, dolžino ukazov ter podporo za posebne operacije (vektorji, plavajoča vejica itd.).
Kako nastane strojna koda
Strojna koda nastane z uporabo prevajalnikov (compiler), asemblerjev (assembler) ali orodij za povezovanje (linker). Visokonivojski jeziki, kot so C ali Java (po prevodu v izvorno kodo za stroj ali v bytecode za VM), se s prevajalnikom pretvorijo v strojno kodo ali v vmesne formate, ki jih izvrši navidezna strojna oprema. Asembler prevaja sestavljeno (assembly) kodo neposredno v strojno kodo.
Orodja in analiza
Za delo s strojno kodo se uporabljajo orodja, kot so:
- Asembler/prekvalifikatorji — prevajajo asembler v binarno obliko.
- Disassemblerji — pretvarjajo binarno kodo nazaj v asembler za analizo.
- Debuggerji in emulatorji — omogočajo izvajanje, korakovanje in testiranje navodil brez dejanskega strojnega okolja.
Uporabe in pomisleki
Strojna koda se uporablja v operacijskih sistemih, gonilnikih, vgrajenih sistemih in v firmware-u, kjer je potrebna visoka učinkovitost in neposreden nadzor nad strojno opremo. Hkrati je zaradi neposrednega dostopa do strojnih virov občutljiva na napake in varnostne ranljivosti (npr. prelivanje medpomnilnika, izvajanje nezaželenih skokov). Zaradi tega so pomembne tehnike, kot so zaščita pomnilnika, preverjanje dovoljenj in varnost pri nalaganju izvršljivih datotek.
Zaključek
Strojna koda predstavlja najnižjo raven programske izražnosti, v kateri so programi neposredno razumljivi in izvršljivi s strani procesorja. Razumevanje njene strukture, oblikovanja navodil in načina izvedbe omogoča boljše optimiziranje programov, odpravljanje napak in zagotavljanje varnosti v sodobnih računalniških sistemih.
Pisanje strojne kode
Strojna koda je lahko zapisana v različnih oblikah:
- Uporaba več stikal. Tako se ustvari zaporedje 1 in 0. To se je uporabljalo v zgodnjih časih računalništva. Od sedemdesetih let prejšnjega stoletja se ne uporablja več.
- Uporaba urejevalnikašestnajstiških zapisov. To omogoča uporabo opkod namesto številke ukaza.
- Uporaba Assemblerja. Jeziki za sestavljanje so preprostejši od opkod. Njihovo sintakso je lažje razumeti kot strojni jezik, vendar težje kot pri jezikih visoke ravni. Assembler sam prevede izvorno kodo v strojno kodo.
- Z uporabo programskega jezikavisoke ravni lahko programi uporabljajo kodo, ki jo je lažje brati in pisati. Ti programi so prevedeni v strojno kodo. Prevajanje lahko poteka v več korakih. Programi v Javi so najprej optimizirani v bitno kodo. Nato se ob uporabi prevedejo v strojni jezik.
Primer
Arhitektura MIPS ima 32 bitov dolga navodila. V tem razdelku so primeri kode. Splošna vrsta navodil je v polju op (operacija). To je najvišjih 6 bitov. Navodila tipa J (skok) in tipa I (takojšen) so v celoti podana z op. Navodila tipa R (register) vključujejo polje funct. To določa natančno delovanje kode. Polja, ki se uporabljajo v teh tipih, so:
6 5 5 5 5 5 6 bitov [ op | rs | rt | rd |shamt| funct] vrsta R [ op | rs | rt | address/immediate] vrsta I [ op | target address ] vrsta Jrs, rt in rd označujejo registrske operande. shamt podaja količino premika. Polji address ali immediate neposredno vsebujeta operand.
Primer: dodajte registra 1 in 2. Rezultat postavite v register 6. Kodiran je:
[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimalno 000000 00001 00010 00110 00000 100000 binarnoNaloži vrednost v register 8. Vzemite jo iz pomnilniške celice, ki je 68 celic za mestom, navedenim v registru 3:
[ op | rs | rt | address/immediate] 35 3 8 68 decimalno 100011 00011 01000 00000 00001 000100 binarnoSkočite na naslov 1024:
[ op | ciljni naslov ] 2 1024 decimalno 000010 00000 00000 00000 00000 10000 000000 binarnoSorodne strani
- Binarni številski sistem
- Kvantni računalniki
- Nabor ukazov
- Računalnik z zmanjšanim naborom ukazov
Vprašanja in odgovori
V: Kaj je strojna koda?
O: Strojna koda je računalniški program, napisan v strojnem jeziku, ki uporablja nabor ukazov določene računalniške arhitekture in je običajno zapisan v binarni obliki.
V: Kaj je najnižja raven programske opreme?
O: Strojna koda je najnižja raven programske opreme.
V: Kako računalniki izvajajo druge programske jezike?
O: Drugi programski jeziki so prevedeni v strojno kodo, ki jo računalnik lahko izvede.
V: Iz česa je sestavljen ukaz v strojni kodi?
O: Navodilo v strojni kodi je sestavljeno iz opkode (koda operacije) in operanda(-ov). Operandi so običajno pomnilniški naslovi ali podatki.
V: Kaj je nabor navodil?
O: Nabor ukazov je seznam opkod, ki so na voljo za računalnik.
V: Kaj sestavljavci programov počnejo s kodo?
O: Sestavljavci programov spremenijo kodo v drug jezik ali strojno kodo.
V: Kako je drugo ime za strojno kodo?
O: Strojna koda se včasih imenuje tudi domača koda in se uporablja, kadar govorimo o stvareh, ki delujejo le na nekaterih računalnikih.
Sorodni članki
Avtor
AlegsaOnline.com Strojna koda – definicija, delovanje in nabor ukazov računalniške arhitekture Leandro Alegsa
URL: https://sl.alegsaonline.com/art/60338
Viri
- webopedia.com : "What is machine language?"
- wisegeek.com : "What is Machine Code?"
- searchcio-midmarket.techtarget.com : "What is machine code"
- merriam-webster.com : "Machine language - Definition and More from the Free Merriam-Webster Dictionary"
- computerhope.com : "Machine language"
- developer.com : "Managed, Unmanaged, Native: What Kind of Code Is This?"
