Mashina kodı

Programmalastırıwda **mashina kodı** yamasa **mashina tili** *([[Inglis tili|ingl]]. machine code)*− kompyuterdiń oraylıq processor blogın (CPU) basqarıw ushın qollanılatuǵın mashina tili kórsetpelerinen ibarat kompyuter kodı. Onlıq kompyuterler bir waqıtları keń tarqalgan bolsa da, házirgi zaman bazarında binar kompyuterler ústemlik etedi; bul kompyuterler ushın mashina kodı "kompyuter tárepinen oqıw hám túsindiretuǵın kompyuter programmasınıń binar yaǵnıy ekilik kórinisi. Mashina kodındaǵı programma mashina kórsetpeleri izbe-izliginen ibarat (múmkin maǵlıwmatlar menen aralasqan)."

Hárbir kórsetpe processordı, processor registrlerindegi yamasa yadındaǵı maǵlıwmatlardıń bir yamasa bir neshe birliklerinde júklew, saqlaw, ótiw yamasa arifmetikalıq logikalıq birlik (ALU) operaciyası sıyaqlı júdá anıq wazıypanı orınlawǵa májbúr etedi. 

Dáslepki processorlarda hárbir shıǵarılǵan jańa processor menen keri úylesimlilikti buzıwı múmkin bolǵan arnawlı kodı bar edi. Kórsetpeler toplamı arxitekturası (ISA) túsinigi onıń anıq orınlanıwın kórsetpesten, sistemanıń komandalar jıynaǵınıń yadındaǵı minez-qulqın hám kodlawın anıqlaydı hám belgileydi. Bul processorlar toparında úylesimlilikke imkaniyat beretuǵın abstrakciyalıq dáreje retinde háreket etedi, usılayınsha ISA standartına sáykes jazılǵan yamasa jaratılǵan mashina kodı shańaraqlıq barlıq processorlarda, sonıń ishinde keleshektegi processorlarda da jumıs isleydi. 

Ulıwma, hárbir arxitekturalıq shańaraq (mısalı, x86, ARM) óziniń ISA, arnawlı mashina kodı tili bar. PDP-11 kórsetpeler toplamına qosımsha qollawdı qamtıytuǵın VAX arxitekturası hám IA-32 kórsetpeler toplamına qosımsha qollawdı óz ishine alatuǵın IA-64 sıyaqlı ózgeshelikleri bar. Taǵı bir mısal PowerPC 615 processorı PowerPC hám x86 kórsetpeleriniń ekewin de qayta islewge arnalǵan.

Mashina kodı − qatań sanlı til hám baǵdarlamashıǵa arnalǵan oraylıq processordıń eń tómen dárejeli interfeysi. Assembler tili sanlı mashina kodı menen adam oqıy alatuǵın versiya arasında tikkeley salıstırıwdı támiyinleydi, onda sanlı operaciya kodları menen operandlar oqılatuǵın qatarlar menen almastırıladı (mısalı, x86 sistemasında NOP kórsetpesi retinde 0x90, 0xB8 MOV kórsetpesi, 0xE8 - CALL yamasa 0x0F05 degendi bildiredi, SYSCALL kórsetpesi ushın). Programmalardı tikkeley mashina kodında jazıw múmkin bolsa da, jeke bitlerdi basqarıw hám sanlı adresler menen konstantalardı qol menen esaplaw jalıqtıradı hám qátege beyim. Usı sebepli, programmalar házirgi kontekstlerde tikkeley mashina kodında júdá siyrek jazıladı, biraq tómen dárejeli otladka, programmanı dúzetiw (ásirese assembler deregi bar bolmaǵanda) hám assembler tilin ajıratıw ushın orınlanıwı múmkin. 

Házirgi waqıtta programmalardıń kópshiligi joqarı dárejeli tillerde jazılǵan. Bul programmalar kompilyator arqalı mashina kodına awdarıladı yamasa interpretator arqalı túsindiriledi, ádette bayt kod sıyaqlı aralıq kodqa awdarılǵannan keyin, soń interpretaciyalanadı.

Mashina kodı anıqlaması boyınsha baǵdarlamashıǵa kórinetuǵın programmalastırıw anıqlamasınıń eń tómen dárejesi bolıp tabıladı, biraq ishki kóplegen processorlar mikrokodtı paydalanadı yamasa mashina kodı kórsetpelerin mikro-operaciyalar dizbeginde optimallastıradı hám túrlendiredi. Mikrokod hám mikro-operaciyalar ádette mashina kodı bolıp esaplanbaydı; ayırım mashinalardı qospaǵanda, paydalanıwshı mikrokodtı yamasa mikro-operaciyalardı jaza almaydı, al mikrokodtıń jumısı hám mashina kodı kórsetpeleriniń mikro-operaciyalarǵa túrleniwi ónimlilikke baylanıslı alternativ tásirlerdi qospaǵanda, baǵdarlamashı ushın ashıq túrde júredi. 

## Kórsetpeler jıynaǵı
Hárbir processor yamasa processorlar toparınıń jeke kórsetpeler jıynaǵı boladı. Kórsetpeler - bul mashina komandalarına sáykes keletuǵın bitlerdiń, cifrlardıń yamasa simvollardıń úlgileri. Usılayınsha, kórsetpeler jıynaǵı (tiykarınan) birdey arxitekturanı paydalanatuǵın processorlar klasına tiyisli. Miyrasxor yamasa tuwındı processor konstrukciyaları kóbinese aldınǵı versiyanıń kórsetpelerin qamtıydı hám jańa qosımsha kórsetpelerdi qosıwı múmkin. Geyde miyrasxor dizayn ayırım kórsetpe kodınıń mánisin toqtatadı yamasa ózgertedi (ádette ol jańa maqsetler ushın kerek bolǵanlıqtan), belgili bir dárejede kod úylesimliligine tásir etedi; hátte úylesimli processorlar ayırım kórsetpeler ushın sál ózgeshe háreketti kórsetiwi múmkin, biraq bul siyrek másele. Sistemalar yadtıń jaylasıwı, operacion sistemalar yamasa periferiyalıq qurılmalar sıyaqlı basqa maǵlıwmatlarda da ózgesheleniwi múmkin. Programma ádette usınday faktorlarǵa súyenetuǵınlıqtan, hár túrli sistemalar ádette bir tipli processor paydalanılsa da,  birdey mashina kodın iske túsirmeydi. 

Processordıń kórsetpeler jıynaǵında turaqlı yamasa ózgeriwshi uzınlıqtaǵı kórsetpeler bolıwı múmkin. Úlgilerdiń shólkemlestiriliwi anıq arxitektura menen kórsetpe túrine baylanıslı ózgeredi. Kórsetpelerdiń kópshiliginde tiykarǵı kórsetpe túrin (mısalı arifmetikalıq, logikalıq, ótiw, h.t.b.), operaciyanı (qosıw yamasa salıstırıw sıyaqlı) hám operand(lar) túrin beretuǵın basqa maydanlardı kórsetetuǵın bir yamasa bir neshe operaciyalıq kod maydanları boladı. Adreslew rejim(leri), adreslew jıljıw(lar)ı, indeks yamasa operand mánisiniń ózi (kórsetpedegi usınday turaqlı operandlar operativ dep ataladı). 

Barlıq mashinalarda yamasa jeke kórsetpelerde anıq operandlar bolmaydı. Jalǵız akkumulyatorı bar mashinada akkumulyator alternativ túrde shep jaq operand hám kóplegen arifmetikalıq kórsetpelerdiń nátiyjesi bolıp tabıladı. Ayırım basqa arxitekturalarda, mısalı x86 arxitekturasında ulıwma kórsetpelerdiń akkumulyatorlıq versiyaları bar, akkumulyator uzaǵıraq kórsetpeler boyınsha ulıwma registrlerdiń biri retinde qarastırıladı. Stek mashinasında jasırın stekte onıń operandlarınıń kópshiligi yamasa barlıǵı bar. Arnawlı maqsetli kórsetpelerde de jiyi anıq operandlar joq; mısalı x86 arxitekturasındaǵı CPUID mánislerdi tórt jasırın tayınlaw registrlerine jazadı. Ashıq hám jasırın operandlar arasındaǵı bul ayırmashılıq kod generatorlarında zárúr, ásirese registrdi bóliw hám janlı diapazondı baqlaw bólimlerinde. Jaqsı kodtı optimallastırıwshı kóbirek turaqlı tarqatıwǵa, registrlerdiń turaqlı búkleniwine (onı usı turaqlıǵa almastırıw arqalı bosatılǵan turaqlı ańlatpanıń nátiyjesi tayınlanǵan registr) hám basqa kodtı jaqsılawǵa imkaniyat beretuǵın jasırın hám ayqın operandlardı baqlay aladı.

## Programmalar
Kompyuter programması − oraylıq processor (CPU) orınlay alatuǵın kórsetpeler dizimi. Programmanıń orınlanıwı onı orınlaytuǵın oraylıq processordıń máseleni sheshiwi hám usılayınsha nátiyjege erisiwi ushın ámelge asırıladı. Ápiwayı processorlar kórsetpelerdi izbe-iz orınlay alatuǵın bolsa, superskalyar processorlar belgili bir jaǵdaylarda (qubır tolǵanda) eki yamasa onnan da kóp kórsetpelerdi bir waqıtta orınlay aladı. Mısal retinde, 1993-jılǵı original Intel Pentium «qubırı tolǵanda» saatlıq ciklge eń kóp eki kórsetpeni orınlay aladı. 

Programma aǵımına orınlanıwı keyingi sanlı izbe-iz adresten basqa adreske jetkerip beretuǵın arnawlı «sekiriw» kórsetpeleri tásir etiwi múmkin. Bul shártli sekiriwlerdiń júz beriwi mánistiń basqa mánisten úlken, kishi yamasa oǵan teń bolıwı sıyaqlı shártke baylanıslı. 

## Qaytalanatuǵın kórsetpeler
Ózgeriwshi uzınlıqtaǵı kórsetpeler jıynaǵı bar processor arxitekturalarında (mısalı Intel kompaniyasınıń x86 processorlar toparı) bul Kruskal sanı dep atalatuǵın basqarıw aǵımın qayta sinxronlaw qubılısı sheńberinde, geyde nátiyje kodtı aldınnan retlew ushın operaciyalıq kod dárejesindegi programmalastırıw arqalı múmkin boladı. Eki kod jolı operaciyalıq kod tártibiniń ulıwma fragmentin bólisedi. Olar qabatlasatuǵın kórsetpeler, qaytalanatuǵın operaciyalıq kodlar, qabatlasatuǵın kod, qabatlastırılǵan kod, kórsetpeniń kesiliwi yamasa kórsetpeniń ortasına ótiwi dep ataladı hám superpoziciya formasın bildiredi. 

1970 hám 1980-jılları yad keńisligin saqlaw ushın geyde qaytalanatuǵın kórsetpeler qollanıldı. Bir mısal Microsoft korporaciyasınıń Altair BASIC programmasında qáte kestelerin ámelge asırıwda boldı, bunda aralas kórsetpeler óz-ara kórsetpe baytların bólisti. Bul usıl búgingi kúnde siyrek paydalanıladı, biraq bayt dárejesinde ólshemdi hádden tıs optimallastırıw kerek orınlarda, mısalı júklew sektorlarına sáykes keletuǵın júklewshilerdi ámelge asırıwda kerek bolıwı múmkin. 

Ol sonday-aq geyde bóliwge hám buzıwǵa qarsı shara retinde kodtı jasırıw usılı retinde paydalanıladı.

Bul princip sonıń menen bir qatarda bir neshe kórsetpeler jıynaǵına sáykes kelmeytuǵın processor platformalarında jumıs islewi kerek ekilik fayllardıń ulıwma kod izbe-izliginde qollanıladı. 

Bul qásiyet sonday-aq bar kod repozitoriylerinde gadjetler dep atalatuǵın kútilmegen kórsetpelerdi tabıw ushın paydalanıladı hám qaytarıwǵa baǵdarlanǵan programmalastırıwda libc-ke qaytarıw hújimleri sıyaqlı ekspluataciyalar ushın kodtı kirgiziwge alternativ retinde paydalanıladı.

## Derekler

## Qosımsha oqıw

* 
* 
*