Személyes eszközök
Keresés

 

A InfoWiki wikiből


Első generációs programozási nyelvek

A számítógépek a NEUMANN elveknek megfelelően a végrehajtandó program-utasításokat a memóriában tárolják. A memória ma már alapvetően byte szervezésű, egyetlen nagy méretű byte-sorozatnak tekinthető. Minden byte egy egész számot jelölhet, 0..255 értéktartományból. Ebből az következik, hogy a mikroprocesszor alapvetően az utasításokat is számoknak tekinti.

A gépi kódú programozási nyelvben az utasításokat számkódok jelölik. Amennyiben az utasításnak vannak paraméterei, úgy azokat is számként kell megadni. A gépi kódban létező fogalom a regiszter, amely a mikroprocesszoron belüli tárolórekeszt jelöl. Egy ilyen rekesz tartalma egy egész szám lehet. A regisztereknek kötött nevük van, pl. AX, BX, CX, DX. A 32 bites processzorokon a regiszterek nevei felvették az ’E’ előtagot (Extended AX regiszter – EAX). Aránylag kevés regiszter áll rendelkezésre (kevesebb mint 20 darab), és többnek speciális feladat volt, ezért nem lehetett bármilyen célra felhasználni. Két szám összeadását az alábbi módon kell végrehajtani:

  1. Olvassuk be az első számot az EAX regiszterbe a memóriából.
  2. Az EAX regiszterhez adjuk hozzá a második számot.
  3. Az eredményt (az EAX regiszter új értékét) tároljuk a memória egy másik pontján.
Image:Abra01.png
Gépi kódú programrészlet


Az utasításokat számkódok jelölik. Ezek a számok 0..255 közötti egész számok. A számkódokat leggyakrabban hexadecimális formában adják meg. A bal oldali oszlopban a memóriacímeket adjuk meg (0044F02B,…) ahol az adott gépi kódú utasítást tároljuk. A gépi kódú utasítások a második oszlopban vannak (a 8B45F4 számsorozat egyetlen gépi kódú utasítást (8B), valamint a paramétereit jelöli: honnan kell beolvasni az értéket az EAX regiszterbe (45,F4)).

A fentieken is látszik, hogy a gépi kódú programozási nyelv nehézkes, nehezen tanulható. A kész program nehezen megérthető, nem áttekinthető.

Sok más hátránya mellett külön kiemelendő, hogy a gépi kódú programokat alkotó utasítások csak az adott mikroprocesszor számára érthetőek. Vagyis más processzor esetén az utasításkódok is mások. Nemcsak számkódjukban különböznek, hanem esetleg kevesebb vagy több utasítás van, illetve más-más a paraméterezése a hasonló feladatú utasításoknak. Ha egy gépi kódban programozó számára egy másik processzorra kellett programot írni, először még el kellett sajátítania a különbségeket. Nyilván az alapelvek maradtak, de az utasítások különbözősége sok nehézséget okozott.

A programozó szemszögéből a gépi kódban történő programozás nagyon lassú folyamat. Aprólékosan lehet csak a programot felépíteni. Az utasítások nagyon alacsony szintűek voltak, egy egyszerű összeadás művelet is - mint láttuk a fenti példán – három utasításból állt. Egy nagyobb rendszer elkészítése olyan időigényes feladat lenne, hogy inkább csak rövidebb, egyszerű programokat készítettek benne a programozók.

Előnyei persze akadnak ennek a nyelvnek is: a gépi kódú utasítások segítségével maximalizálhatjuk a programunk futási sebességét, vagy memória-kihasználtságát (vagy mindkettőt egyszerre), hiszen megkötések nélkül felhasználhatjuk a mikroprocesszor minden lehetőségét, és szabadon használhatjuk a memóriát is.

A gépi kódú programokat direktbe töltötték be egy időben a gépkezelők (operátorok). A legegyszerűbb módszer szerint a mérnöki pulton (konzol) 8 db kapcsolóval állították be, hogy a 8 bit melyike legyen 1, melyike 0. Ezzel írtak be egy 0..255 közötti számot. Egy újabb kapcsolóval jelezték, hogy a bitek állapota megfelelő, a számot a gép tárolhatja a memória következő rekeszében. Ezt ismételték meg minden egyes számra.

El lehet képzelni, hogy amennyiben egy számot kihagytak véletlenül a listáról, az egészet lehetett kezdeni előlről, mivel 'beszúrás', vagy 'törlés' nem létezett ezen a szinten. De az még a jobb eset volt, ha észrevették egyáltalán hogy hibáztak.

Amennyiben a rögzítés hibátlannak tűnt, egy újabb kapcsoló lenyomásával utasították a processzort a végrehajtásra. A legelső utasítás kódjával kezdődött a végrehajtás, a továbbiakban a processzor engedelmeskedett a számkódoknak, és végezte a dolgát. Amikor a processzor megállt, a program befejezettnek minősült.

Ha a processzor nem állt le, akkor lehetett gondolkodni mi volt a hiba, mit csinálhat vajon a processzor. Ráadásul elképzelhető volt, hogy a program maga hibátlan volt, csak az adatrögzítés hibázott.

Ma már az utasításokat tudjuk külső file-ban tartani, és speciális kezelőprogramokkal szerkeszteni azt (beszúrás, átírás, törlés, stb). Majd a kész adatfolyamot (számsorozat) direktbe a memóriába másolni. Valamint van lehetőség a futó programot elemezni, megfigyelni melyik utasítást hajt végre éppen, megtekinteni futás közben az általa használt memóriarekeszek értékeit, stb. Tehát ma már rengeteg eszköz segít a programozók, operátorok, hibakeresők munkáját. De a programozási nyelv (gépi kód) alapvető problémáit ez nem oldja meg, csak az életet teszi kissé könnyebbé.

Hernyák Zoltán
A lap eredeti címe: „http://wiki.ektf.hu/wiki/Mp1/page002
Nézetek
nincs sb_3.239.109.55 cikk