Gépi kód

A Wikipédiából, a szabad enciklopédiából

A gépi kód a számítástechnikában használt műveletek és adatok (általában bináris – kettes számrendszeren alapuló – vagy hexadecimális – tizenhatos számrendszeren alapuló – számokkal ábrázolt) olyan sora, amely a számítógép processzora számára közvetlen utasításként értelmezhető.

A gépi kód az egyetlen "nyelv", amit a számítógép központi parancsvégrehajtó egysége, a processzor megért, ezért minden programozási nyelvet gépi kóddá kell alakítani ahhoz, hogy a program végrehajtható legyen. Ezt az átalakítást végzik a fordítóprogramok. Ezek az utasítások általában csak egy processzortípusra vonatkoznak, és azon belül is generációnként változhatnak (az újabb processzorokban az előzőnél több utasítás szokott lenni). Az egyes processzortípusok utasításkészletei egymással egyáltalán nem kompatibilisek. Ez azt jelenti, hogy egy másik processzorra készített programot (ez alól az operációs rendszerek se kivételek) nem tudnak végrehajtani (például Alpha-s Windows-ot nem lehet PC-kre feltenni és fordítva, vagy PC-s Linux-ot nem lehet SPARC-ra feltenni és fordítva stb.).

A gépi kódhoz legközelebb álló programozási nyelv az assembly. (A közel állás itt azt jelenti, hogy az assembly utasításokból álló program és a gépi kódú lefordított program között a legnagyobb a kölcsönösen egyértelmű megfelelés, vagyis az assembly utasítások, programsorok nagy részéhez egy gépi kód csoport tartozik, és ez igaz fordított irányban is.)

Példa gépi kódú programra[szerkesztés | forrásszöveg szerkesztése]

Az alábbi program egy gépi kódú programpélda. Az adatokat tizenhatos számrendszerben, byte-onként csoportosítva ábrázolja. (Ez egy "tetszőlegesen választott" ábrázolási forma, mivel jelölhetnénk például bináris számrendszerben vagy tízes számrendszerben is: a program ugyanaz lenne.)

B8 D4 07 00 00 90 48 75 FC C3

A példa assembly eredetije[szerkesztés | forrásszöveg szerkesztése]

A fenti gépi kód az alábbi GNU/as assembly forrásprogramból készült (de készülhetett volna természetesen tetszőleges más programnyelven írt programból is; az assembly programozási nyelv mindössze a gépi kódhoz eső „legközelebbi” nyelv, így a legjobban láthatóak a programnyelv utasításai és a gépi kódú végeredmény közötti kapcsolatok):

.globl main
       .type main,@function
main:
       movl    $2004,%eax
loop1:
       nop
       decl    %eax
       jnz     loop1
       ret