Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Mašininis kodas

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

Mašininis kodas, dvejetainis kodas ar vykdomasis kodas - tai tokia programos forma, kur ji jau yra tinkama konkrečiam procesoriui vykdyti, t.y., yra sukompiliuota, naudojant kompiliatorių ar asemblerį ir paversta į visiškai tiesiogiai procesoriui suprantamą pavidalą. Savo esme mašininis kodas yra labai artimas asembleriui, tad neretai painiojamas.

Paprastai pradiniu metu mašininis kodas tai būna objektinis failas, kuris gali būti vėl pertransliuotas ir pakeistas į vykdomąjį, tačiau su nepakeistais adresais ir nuorodomis į bibliotekines funkcijas. Jei vykdomasis kodas yra pertransliuotas ir apjungtas su bibliotekinėmis funkcijomis, jis jau paverčiamas į vykdomąjį failą, kuriame yra tas pats vykdomasis kodas, tačiau vietoje nuorodų yra tiesioginiai kreipimaisi.

Visai griežtai techniškai žiūrint, pats dvejetainis kodas dar negali būti vykdomas, nes čia dar paprastai trūksta dviejų dalykų: kažkuri dalis dvejetainiame kode esančių atminties adresų visvien dar turi būti tranliuoti, bent jau įėjimo taškas - ar tiesiogiai, ar paprasčiausiai perkeliant programą būtent į tokias atminties adresų vietas, kurios jai tiktų, nes įėjimo taškai gali būti įvairūs, pvz., DOS tipo operacinėse sistemose galėjo būti ir 0h (COM failai), ir 100h (EXE failai). Taigi, net ir mašininiam kodui prireikia dar šiokios tokios transliacijos, kuri įvykdoma programos paleidimo metu. Programa, kuri daro adresų transliaciją, vadinama loaderiu (loader).

Antras dalykas - tai gali prireikti visokių statinių ar dinaminių bibliotekinių funkcijų, kitaip tariant - tiesiog bibliotekų. Statiškai apjungiant programą su bibliotekomis, tiesiog bibliotekos ar paskiros funkcijos perkeliamos ir prijungiamos prie programos, tokiu atveju objektinis failas yra tiesiogiai keičiamas į vykdomąjį, pvz., prijungus bibliotekas, OBJ pakeičiamas į EXE. Kitu atveju failas gali būti ir dinamiškai jungiamas su bibliotekomis - tokiu atveju visas OBJ tipo failas keičiamas į EXE, nieko neprijungiant, tačiau vykdymo metu operacinė sistema programai turi pakrauti atitinkamas bibliotekas, pvz., kokias nors DLL. Programa, kuri jungia su bibliotekomis, vadinama linkeriu (linker).

Kai kuriais atvejais būna ir taip, kad programa gali turėti ir nuosavas bibliotekų pakrovimo priemones.

Skirtumas tarp mašininio kodo ir asemblerio toks, kad asembleris visgi yra žmonių kalba užrašytos mašininės komandos, o mašininis kodas - tos pačios komandos, užrašytos procesoriaus kalba. Tačiau ir vienu, ir kitu atveju atitikimas tarp komandų yra visiškai tiesioginis, tad naudojant, pvz., tam skirtą dizasemblerį, galima mašininį kodą redaguoti, nes jis būna matomas, kaip asemblerio tekstas.