Vita:Assembly programozási nyelv

Az oldal más nyelven nem érhető el.
Új téma nyitása
A Wikipédiából, a szabad enciklopédiából
Legutóbb hozzászólt Orion 16 évvel ezelőtt a(z) Operandusok témában

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

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)

Hiányosságok (MCU és nyelvjárások)[szerkesztés]

A használatról szóló részben megemlítettem a mikrokontrollereket, amely "témát" úgy érzem valahogy teljesen kimaradt a cikkből... Pedig fontos lenne, mert manapság nagyon divatos megoldás az kis, egyszerű hardverek (pl mosógép) vezérlését is programozott elven megvalósítani. De gondoljunk csak ipari vezérlésekre, járműelektronikára, stb... A használatos chipek sokszor igen puritán architektúrával bírnak (pl PIC16F84-nél 35 utasítás, 1kW program-, 68Byte (!) adatmemória, 8 szintű stack)[1] -> ergo assembly fordító használható és sokszor ez "elegendő" is !

A másik dolog a nyelvjárások kérdése. Valóban igen processzorspecifikus dolog, az utasításkészlet (és architektúra) de nekem asm-nyelvjárás alatt a fordítóprogramok sajátosságai, direktívái jutnak először eszembe. Valahogy ebből a szemszögből (is) át kéne csócsálni ama fejezetet; esetleg a példában is rámutatni egy-két direktívára... Üdv, --Master of Orion 2007. május 30., 19:43 (CEST)Válasz

Operandusok[szerkesztés]

Sajnos még mindig nem volt időm/türelmem végigolvasni a teljes cikket, de több helyen is talákoztam azzal a súllyos tévedéssel, hogy az "Operandus" szó alatt a szerző(k) csupán memóriahivatkozást értenek. Ez - ha tudásom nem csal - teljesen hibás !!! --Master of Orion 2007. június 1., 14:58 (CEST)Válasz

  • Bocs, de elárulnád, mi a gondod ezzel a két mondattal? "Általában nincs operandusuk, ui. nem igényelnek memóriához fordulást. Az érintett regiszterek és a művelet általában az utasítás mnemonikból derül ki." Mi az, ami miatt kitörölted? Kösz!bg_25 2007. június 2., 21:09 (CEST)
Oké, vegyük sorra!
  1. mondat: "Általában nincs operandusuk, ui. nem igényelnek memóriához fordulást." A mondat mindkét fele hibás. Ugyanis! Az operandus elvont fogalom, magyar szócikk nem lévén, az angol wikit idézném [2] : "In computer programming languages, the definitions of operator and operand are almost the same as in mathematics. [..] The operand may be a processor register, a memory address, a literal constant, or a label." TEHÁT! Attól még, hogy nem igényel memóriához fordulást lehet operandusa, sőt van is! Mivel ez a mondat a regiszterkezelő utasítások alfejezetben volt, az operandus itt úgynevezett regiszteroperandus, de attól még operandus.
  2. mondat : "Az érintett regiszterek és a művelet általában az utasítás mnemonikból derül ki." Ez viszont általános megfogalmazás, nem csak az regiszterkezelő utasításokra vonatkozik, hanem az egész mnemotechnikára...ezért nem illett oda.Üdv,--Master of Orion 2007. június 3., 20:56 (CEST)Válasz


Csak szeretnék arra utalni, hogy egy általános assembler utasitásnak lehet cimkéje, kell lennie valamilyen mnemonikjának és lehet operandusa. Mivel a regiszeter utasitások között nagyon sok olyan van, aminek a mnemonikjában van az implicit operandus, és valódi operanduas - szintaktikai értelemben nincsen. Persze, lehet a millió assembler közül olyan, amelynél regiszter műveltehet valóban tartozik operanrus, de ettől függetlenül a dolog általában igaz. Egy átalgos olavssónak jelentős különbséget mutat a többi, "hasonló" utasitáshoz képest - szerintem - ez a megfogalmazás. Azért azt nehéz lenne tagadni, hogy az utasitások operandusaink túlnyomó többsége valamilyen cim jellegű referencia - és esetünkben pont az a jellemző, hogy nem tartozik hozzá memóriára utaló referencia. Minden esetre érdekelne, hogy pl. egy regiszeter jobb és bal oldalának cseréje esetében mi is az operandus? Ui. az utasitás menmonikja pontosan elmond mindent....De ha már ennyire preciz vagy, akkor lécci javitsd ki az irási/olvasási utasitásoknál, hogy az olvasási utsitások nem minden esetben töltenek be memóriatartalmat, ui. vannak olyan utasitások, amelyek "csak" cimet tültenek be. Véleményem szerint az iylen szintű precizitással egy átalgos olvasó számára több bonyodalmat okozol/okozunk, ami inkább zavaró, mint informativ. Sajnos, csaknem minden szabály alól vannak kivételek, amik persze fonosak, de az álatlános fontosabb... Persze, ez csak egy egyéni vélemény. Mint ahogyan nem feltétlen lényeges, és valójában nem is tartozik közvetlenül az assembler keletkezéséhez, hogy van hexa dump meg disassembler - vannak, persze, de ezek akár a lásd még-nél is szerepelhetnének... Azért lássuk be, egy assembler - mint entitás - igen jól elvan akár hexa dump, akár disassembeler lékül is....Ha a szegről akarsz beszélni, biztos, hogy a harapófogót is egyszerre kell megemlegetni? bg_25 2007. június 4., 10:26 (CEST)
Nem értek veled egyet, és szerintem ez nem túlzott precízkedés. Független szakértő megkérdezéséig nem nyúlok a cikkhez.--Master of Orion 2007. június 4., 12:23 (CEST)Válasz
DE a konkrétumokra azért még válaszolok!
"regiszeter jobb és bal oldalának cseréje" PC-nél ugyebár erre szolgál az xchg művelet - vagy akár egy bitforgató utasítással is el lehet érni de - a lényeg, hogy ezeknél is meg kell adni operandust[3] vagyis, hogy melyik regiszter két felét cserélje fel. Bizonyításképp itt az eredeti Intel doksi : [4] lásd 415.oldal xchg utasítás legelső mondata: "Exchanges the contents of the destination (first) and source (second) operands."
És ha már az átlag olvasót említetted... A PC-k jelenlegi elterjedtsége miatt feltételezhető, hogy az olvasó legvalószínűbben PC-s assemblyvel fog találkozni. Ott (szerintem) gyakoribbak az explicit operandusú regiszterkezelő utasítások. Egyébként meg ha kellőképp struktúrált a dokumentum a laikus is ki tudja keresni mire van szüksége... He helyenként mélyebb és pontosabb a leírás az csak a minőséget növeli.
Tévedsz, hogy nem tartozik az assembler "keletkezéséhet" a hexa dumper. De egye fene, a disassemblerrel együtt a lásd még-ba helyezhető, de akkor a többit is át kéne rakni...bár nem tudom, hogy mondjuk egy MCU-ra hogy fejlesztenél bármiféle debugger vagy emulátor nélkül...de mindegy.
Sőt akkor már az egész utasításleíró részt ki lehene venni, mivel az angol válzotazban is külön szócikk foglalkozik az x86 assembly konkrétumaival [[5]]--Master of Orion 2007. június 4., 17:21 (CEST)Válasz
Szia! Azért nyugodtan nyúlj a cikkhez. Sajnos, megint belefutunk egy csapdába: én az assemblerről beszélek, te pedig az intel akármilyen assembleréről.... Az IBM assembelerben pl. XAA a jobb és bal oldal cseréje. No operandus. És, szerintem, szakitani kellene azzal a közelitéssel, hogy a PC-nél ilyen meg olyan dologgal fog találkozni. 1. Azt ugye Te sem gondolod, hogy átlag PC user assembelerben fog programozni... 2. Az Assembler - úgy általában - nem Intel, nem Z80, nem IBM, nem SUN és nem Motorola - hanem Assembeler. 3. Nem csak PC van a világon, bár néha úgy tetszik. Vannak spec nyelvjárásai egy általános assemblernek (vagy csak azok vannak - ez izlés kérdése), amiket - szerintem - a maga helyén kellene leirni, tárgyalni : kecske is meg káposzta is. 4. általában olyan tipusú utasitások vannak, mint amiket itt leirtunk, konkréten meg több száz, más néven, minimális különbségekkel több száz Szerintem nekünk, akik láttak már ilyet, ontosabban ilyeneket, inkább a közös jellemzőket kellene közérthetően - ezzel nem mondom, hogy nem kellő szinvonalon - magyarázni, és a konkrétumot pl. Intel 386x assemblert, utasitáskészlettel, stb. ott tárgylni, IBM 360 assembler újabb szócikk és igy tovább... Ugyenezen okból mondtam, hogy általában egy assembler mellé nem kell disassember, ui. általános dissambler nincs is. Ha irsz egy szócikket, hogy programfejlesztés mikro controller/processzor környezetben, assembler nyelven, akkor persze, kell a loader, linker, disassembler, hexa dump, tracer, emulátor, szimulátor, mifene, stb.... de az már nem assembler, hanem a fejlesztési folyamat. Csak ennyit szerettem volna mondani, amúgy lelkiismereted és szakmai meggyőződésed szerint tégy, amit jónak látsz... Bocs a hosszabb szösszenetért! bg_25 2007. június 4., 20:04 (CEST)
HI! Az igazsághoz hozzátartozik, hogy mielőtt a cikkhez hozzányúltam nem kockáztam végig a teljes laptörténetet, hogy megtudjam pontosan ki mit is írt...ergo nem tudom az eredeti szócikk hanyad részben származik tőled. Bár ez most nem is lényeges talán. Szóval úgy döntettem egy időre akkor is félreteszem Ezt a szócikket. Valóban általánosan kéne írni, de egy ilyen konkrét és specifikus nyelvnél ez nem épp a legszerencsésebb vállalkozás. Egyszerűen jön majd valaki akinek teljesen más lesz a szakmai előélete, tapasztalata amiből mást általánosít. :D Igaza lesz a maga módján, mint ahogy valszeg nekünk is...
A magam részéről egy másik vitalapon is említettem, hogy itt több szócikk is erősen a PC-re van kihegyezve. És mivel a közép és felsőoktatásban sok helyen a PC népszerű (itt most nem csak ASM-re gondolok, de arra is), szóval továbbra is tartom azt a nézetet, hogy az olvasók nagyobb többsége e felé fog hajlani.
ui: Talán az angol verzió alapján kéne átdolgozni az egészet. Jelenleg nincs időm ekkora vállalkozásra, sok szerencsét a bátor vállalkozónak! Bye, --Master of Orion 2007. június 4., 21:42 (CEST):DDVálasz