Vita:Assembly programozási nyelv

A Wikipédiából, a szabad lexikonból.

[szerkesztés] a cikkből kivéve

TÉTEL (bizonyítás nélkül): minden magas szintű nyelven írt programra van olyan assembly nyelvű forrásfájl, aminek assemblerált kódja megegyezik az előbbi fordítása során keletkezett gépi kóddal. A definícióból következik, hogy az előző állítások ellenkezői is igazak. ( :-D~ )


Hagyományos assembly nyelven egy program kódolása (értsd: az assembly nyelvű programforrás megírása) a túlságosan elemi műveletek miatt időigényes folyamat, egységnyi idő alatt nem lehet annyi "kiló" asm kódot írni, mint hll-t. "Akcióban" sokszor nekünk kell a megfelelő makrókat "feltalálni", ami szintén lassító tényező.


:->


Nekem az a nagy problémám ezzel a cikkel kapcsolatban, hogy a gépi kód cikkéből jobban meg lehet érteni, hogy mi is az assembly. Mert hogy csak a lényeg maradt ki, márpedig valamilyen definíció: mondjuk hogy az assembly arra való, hogy a gépi kód közvetlen előállítását segítse, vagy ilyesmi. -- vbzoli


Nekem több, alapvető problémám van már a definícióval is:

Az assembly programozási nyelv a gépi kódhoz (a számítógép „anyanyelvéhez”) legközelebb álló, és így a leghatékonyabb programozási nyelv.

1. A gépi kód, mint olyan, nem más, mint a memóriában tárolt adatok egy része vagy összessége. Az, hogy egy bizonyos adat utasítás, az csak és kizárólag csak attól függ, hogy az utasítás számlálónak nevezett speciális mutató (hogy ezt a gépben egy regiszterrel vagy vagy más módon valósítják meg, most ne foglalkozzunk) éppen erre az adatra mutat. Neumann János nagy ötlete pontosan az volt, hogy a gép képes legyen saját programjának módosítására.... Egyes vírusok pont azt használják ki, hogy tárolóhatár-túllépéssel - adatként - utasításokat visznek be... Azt, hogy ezt az adatot binárisan, hexadecimálisan, oktálisan, szimbólikusan írjuk vagy olvassuk, az most lényegtelen. Egy gépi kódú utasítás legfontosabb jellemzője talán az, hogy az a bizonyos kód egy más típusú gépben (más (mikró)processzort használó) való végrehajtása esetleg semmit, de valószínűleg egészen más funkciót valósít meg.

2. Maga az assembly nyelv olyan értelemben áll legközelebb a gépi kódhoz, hogy a programozás folyamán csak és kizárólag a gép saját utasítás-készletét lehet felhasználni. Vannak un. pszeudo utasítások, amelyek a fordítás, betöltés, stb. számára adatokat szolgáltatnak, de ezek nem tartoznak a gép utasítás-készletéhez. Például: az utasítás számláló kezdő értékének betöltése, adatterület címének kijelölése, stb.


3. Leghatékonyabb? Milyen kritérium alapján? Viszonylag sok idő alatt kevés utasítás leírása, vagy lehető legkevesebb utasítással adott algoritmus megvalósítása, vagy lehetőleg a legkisebb helyfoglalású program megírása, lehető legkisebb futási idejű program megírása, a legmódosíthatatlanabb vagy olvashatatlanabb program megírása....

4. Ha már definiálni akarjuk az assembly nyelvet, akkor azt mondhatnánk, hogy olyan, alacsony szintű programozási nyelv, amelyben csak a gép elemi, beépített, értelmezhető (ide valamilyen jó definíció kellene!) utasítás-készletét lehet használni. A fordítóprogram egyes utasításokat egy rövidített név, az un. mnemonik alapján ismeri fel. Általában igaz az, hogy egy assembly utsaításból egy gépi kódú utasítás generálódik.

5. A gépek elemi utasítás-készlete többnyire nagyon bő, lényegesen nagyobb (kb. 50-70), mint a magas-szintű nyelvekben használt utasítások (kb. 10-20), és a különféle un. címzési módok még tovább bonyolítják a helyzetet. Egy assembly programban könnyedén megoldható, hogy helytakarékosságból pl. egy utasítás kódja, vagy annak egy része adatként szerepeljen és viszont. Ilyen okok miatt lehet viszont egy program módosíthatatlan.

6. Azt hiszem, nagyon hiányzik egy olyan szócikk, ami a számítógép működésével fogalalkozik, ugyanis itt lehetne jól megmutatni egy utasítás - itt most gépi kódú utasításra gondolok - végrehajtását.

Lehet, hogy túlságosan programozói szemléletű a megközelítésem, de a tényszerűség...

bg_25 2006. január 4., 13:00 (CET)