Vlákno názorů k článku Když céčko nestačí: GAS od Miloslav Ponkrác - Nemám žádné zkušenosti s asm pod Linuxem, zato...

  • Článek je starý, nové názory již nelze přidávat.
  • 25. 2. 2003 8:40

    Miloslav Ponkrác (neregistrovaný)

    Nemám žádné zkušenosti s asm pod Linuxem, zato mám bohaté zkušenosti pod DOS/Windows, i jinými neintelovskými procesory. Tento článek je prakticky první o asm pod Linuxem. Je napsán dost zasvěceně, děkuji moc.

    Celé to na mě budí dojem, že gas je tak trochu nechtěné dítě. Že byl prostě nějak udělán, protože byl potřeba pro překladače Céčka, a nejspíše bylo málo času. Takže se nekontrolovala pořádně syntaxe, předpokládalo se, že překladač C vygeneruje správnou syntaxi. Nikomu se s tím nechtělo moc párat. Protože byl pravděpodobně k dispozici nějaký kus kódu, který se dal pro gas použít a používal AT&T syntaxi, rozhodli se tvůrci, že raději vyrobí novou nekompatibilní syntaxi pro intel asm pro Linux, jen aby proboha už měli překladač asm z krku a hotový.

    Zhruba to, co jsem uvedl výše jsem si dal dohromady mezi řádky z tohoto článku. Nejspíše opravdu není dobré v asm pod Linuxem pracovat.

  • 25. 2. 2003 9:23

    anonymní

    Gas ma naozauj sluzit ako generator kodu pre gcc, so samostatnym pouzitim sa moc nepocitalo. Naco robit kontroly, ktore zbytocne spomaluju kompiler, ked to aj tak v 99.99999% pripadoch netreba?

    Pokial chces pouzivat assembler s Intelovskou syntaxou, tak:
    - pouzi iny assembler, je ich hafo - napr. nasm.
    - pouzi novsie binutils, novy gas vie intel syntax.

  • 25. 2. 2003 10:06

    Miloslav Ponkrác (neregistrovaný)

    Nasm jsem už zkoušel, tedy pod Windows. V zásadě jsem došel k závěru, že toho moc neumí, a vysvětluje to tím, že je to jeho filozofie. Ne, že by se v něm nedalo psát, ale oproti plnohodnotnému masm/tasm je to v podstatě kripl. A používat jej by byl pro mě krok zpět.

  • 25. 2. 2003 10:13

    Miloslav Ponkrác (neregistrovaný)

    ...Naco robit kontroly, ktore zbytocne spomaluju kompiler, ked to aj tak v 99.99999% pripadoch netreba?

    V tom případě je to ale třeba jasně říci, že gas není určen na ruční programování v assembleru a vytvořit pro ruční tvorbu v assembleru vhodnější nástroj, než je gas.

    Mimochodem, MS se předhazuje, že se nedrží standardů a volí si nové, nebo przní současné. A na druhé straně Linux provedl naprosto to samé s tím, že nedodržel standard asm syntaxe pro Intel procesory a vytvořil nový "rádobystandard" pro asm syntaxi.

    Otázkou je, zda gas pro "nalepení" konečně standardní Intel syntaxe také nalepil pořádné kontroly. Otázkou také je, jak je to u gas s makry, pokud má být gas hlavně pro C překladač. Dle mého by bylo dobré odhodit gas jako nepovedený pokus a naprogramovat kompilátor asm pro Linux konečně pořádně.

  • 25. 2. 2003 10:47

    kato (neregistrovaný)

    "na druhé straně Linux provedl naprosto to samé s tím, že nedodržel standard asm syntaxe pro Intel procesory a vytvořil nový "rádobystandard" pro asm syntaxi."

    Obecne pouzitelny linuxovy asembler nemuze mit intelovskou syntaxi, protoze gcc i linux bezi i na architekturach, ktere vyzaduji konstrukce, ktere by v klasickem intelovskem asembleru nesly napsat. Vlastni syntaxi nikdo nevymyslel, bylo vyhodnejsi pouzit proste AT&T syntaxi. Je ovsem pravda, ze gas neni (ani se tak netvari) nijak komfortni. Na druhou stranu funguje a to je asi pro gcc rozhodujici (treba o nasm a nekterych verzich tasm se to bohuzel tvrdit neda -- komfort prinasi komplexitu a ta chyby...)

  • 25. 2. 2003 11:41

    Miloslav Ponkrác (neregistrovaný)

    Assembler nikdy nebyl přenositelný a celkem se očekává, že na jiných architekturách bude i jiná instrukční sada a trochu jiná syntaxe.

    To jest Linuxový assembler prakticky neexistuje, asm se liší pro jednotlivé procesory. A Linux do toho prostě zavedl hokej, nechtělo se mu dodržovat zavedený standard.

    Asembler proste vzdy je a bude platformově závislý, při přenosu na jinou architekturu je obvykle nutné asm kód přepsat. Pokud Vaše srdce žádá obecnou přenositelnost, je logické, že nebudete v asm psát. Z tohoto hlediska považuji za nesmyslný argument přenositelnost asm na jiné platformy.

    Rád bych jenom věděl, jakéžeto asm konstrukce nejdou v intelovské syntaxi napsat. Vše, co je na platformě x86 v asm možné pomocí intelovské syntaxe napíšete.

    Co se týká chyb, já si absolutně nedělám iluze o kvalitách překladačů firmy Borland. Přesvědčil jsem se mnohokrát, že je to spíše beta produkt a pokud můžu, utíkám od nich. Nicméně argument, že v určité verzi program nepracuje dobře, takto můžete vygumovat 100% programů a utilit.

    Komfort přináší komplexitu a ta chyby => prostě máme tady gas, není nic moc, ale funguje. Že nefunguje lépe, ničeho lepšího nejsme schopni, co se dá dělat, uděláme z toho z nouze ctnost a nějaké ty argumenty se vždycky najdou.

  • 25. 2. 2003 13:03

    MIroslav Kokrda (neregistrovaný)

    Zdravicko,

    nebudte demagog, nebo aspon ctete poradne co psal oponent.

    Kdyz rikate:
    Vše, co je na platformě x86 v asm možné pomocí intelovské syntaxe napíšete.

    Tak sebe sama usvedcujete z nepozornosti, protoze reagujete na vetu:
    ... protoze gcc i linux bezi i na architekturach, ktere vyzaduji konstrukce, ktere by v klasickem intelovskem asembleru nesly napsat.

    Cili, se bavime o JINYCH architekturach nez je Intel a x86 ...

    Toz tak ...

  • 25. 2. 2003 13:34

    Miloslav Ponkrác (neregistrovaný)

    Ale taky jsem napsal: Z tohoto hlediska považuji za nesmyslný argument přenositelnost asm na jiné platformy. Tedy pozorný jsem, ale argument prostě neuznávám.

    Každá platforma má svůj asm a jinou instrukční sadu. Naprosto nechápu, proč bych měl tedy jako důvod uznávat jiné platformy, než Intel a x86. Assembler z jiných platforem je prostě nepřenositelný. Když jsem dělal v assembleru Motoroly, byla syntaxe o dost bližší syntaxi gasu. Ale prostě Intel a x86 má svou syntaxi a programové nástroje by toto měly respektovat. To, co předvedl Linux naprosto zbytečné nedodržení již daného standardu. To, co mnozí linuxoví zastánci vyčítají jiným, tedy nedodržování standardů, tady Linux sám provedl.

  • 25. 2. 2003 14:52

    Richard Richter (neregistrovaný)

    Hoci je trochu zbytočné sa hádať o prenositeľnosti assembleru, má KAŽDÝ assembler niektoré podobné črty, napríklad parsing. Samotné konštruovanie inštrukcií je možné realizovať backendom, ktorý je jednoduchší než celý assembler. Konštrukcia vychádza z nejakého medzitvaru, do ktorého sa dostaneme po spracovaní zdrojáku (nevravím, že hneď po prvom). Predopkladám, že napr. intel sytnax je podporovaná nejakou formou frontendu. Skutočne neviem, ako to má gas, ale keď už ste (sme) sa rozbehli do takejto akademickej debaty, tak si princíp backendov a frontendov môžem dovoliť použiť. Keď je jednotná syntax na označovanie registrov, je to ROZHODNE zjednodušenie, ktoré sa prejaví na viacerých platformách. Samotný INTEL má mimochodom nie jeden štandard na písanie inštrukcií (napr. pre 8051 sa pridŕža tradičným zápisom pre jednočipové počítače), existujú aspoň dva spôsoby ako v TASM písať adresy (a ten nekompatibilný s MASM je pritom pre mnohých logickejší), atď... AT&T ma síce raz vyviedlo z miery (študoval som jadro, programovať som neriskoval, nevidím na assembler v unixe osobný dôvod :-) (mimo to jadro teda)), ale nebol problém ju akceptovať. K porušovaniu štandardov alá MS by som to prirovnal možno po veľmi divokej oslave. :-))) (Keď som si pozeral rôzne .s súbory pre rôzne platformy, nebol problém "prepínať" v hlave inštrukčné sady - no jednotná syntax "přišla vhod".)

  • 25. 2. 2003 15:30

    Miloslav Ponkrác (neregistrovaný)

    Tak, jak mi to říkáte, to naprosto chápu. Však jsem to taky naznačil už v mém příspěvku, že si prostě chtěli něco zjednodušit a moc se s tím nepárat.

    Co se týká mezitvarů, to je vnitřní záležitost jakékoholi překladače, ale myslím, že si rozumíme.

    V zásadě mi jde o to, že každé porušení standardu je v zásadě většinou zjednodušení. Otázkou je, zda je to to pravé ořechové jako důvod pro změnu standardů. V tom případě je zahoďme, nechť si každý vymýšlí své změny na TCP protokolu, nechť si každý upravuje X protokol podle svého. Nechť každý překladač C je nekompatibilní se standardem apod..

    Intel má pro platformu x86 asm právě jeden standard, a ten by měl být závazný. Jednočipové počítače jsou jiná platforma. Opakuji existuje právě jeden platný standard daný Intelem pro asm x86, který navíc byl řadu let zažitý. Pak přišel Linux, zdálo se mu naprosto zbytečné dodržovat standard a vymyslel něco úplně jiného. Taková je pravda, ať už se to odůvodňuje jakkoli.

    Řada porušení standardů je rozhodně zjednodušení. TASM, jak píšete také vymyslel kromě standardního MASM módu také tzv. IDEAL mód. Jenomže TASM defaultně pracuje ve standardním MASM módu a do IDEAL jej musíte speciálně přepnout. Zatímco Linux světu daroval naprostou nekompatibilitu v asm na x86 a dlouhá léta nešlo vůbec standardní tvar asm vůbec používat.

    Mluvíte o tom, že porušení asm standardu Linuxem byste s MS přirovnal pouze po divoké oslavě. Díky tomuto porušení standardu bylo dlouhou dobu nutné držet dvě verze asm na stejnou platformu. V podstatě zjednodušení pro překladač, ale určitě ne pro pisatele v asm.

    A po vyzkoušení několika převodních utilit mohu potvrdit, že neexistuje žádný nástroj, který by dokázal bezchybně převést standardní intel syntaxi na AT&T syntaxi. Žádný nástroj pro převod nebylo těžké zamotat již velmi jednodudchými konstrukcemi.

  • 25. 2. 2003 17:02

    Pichi (neregistrovaný)

    Co to tady stale motate za Intel standart? gcc neni Linux.

    gcc je GNU Compiler Colection a tedy je to vysledek GNU projektu. To GNU je GNU is Not Unix. GNU projekt vznikl davno pred vznikem Linuxu. GNU projekt vznikl v dobe, kdy se Intelu jeste ani nesnilo o x86 architekture a tedy v dobe, kdy jeste neexistoval zadny Intel TASM/MASM a podobne sragory. Jedna z prvnich veci pod GNU bylo prave gcc. Zajimalo by me proc Intel nedodrzel standarty AT&T potazmo gas?

    gas vzniknul v dobe, kdy jeste x86 platforma neexistovala a nebyl vubec zadny duvod se zajimat o nejaky Intel standard, kdyz v te dobe jeste bud neexistoval a nebo jen nekde na papire a v hlavach techniku Intelu. gcc a gas ma zasebou mnohem delsi historii nez cela x86 architektura a i po jejim vzniku hlavni proud vyvoje gcc/gas bezel v uplne jinem svete nez Ix86 a jeste dlouho po te co vznikl Linux zustal hlavni proud vyvoje gcc/gas mimo tuto platformu a jen tezko rict jestli vubec dnes uz teziste vyvoje gcc je na Ix86.

    Prosim Vas, proberte se a vrate se do reality. Vratte se z Wintel sveta, do sveta skutecnych pocitacu a skutecnych OS.

  • 26. 2. 2003 9:08

    Miloslav Ponkrác (neregistrovaný)

    Protože Intel vyrobil první procesory x86, tak pro něj sám zvolil asm, který se tím de facto stal standardem pro x86. Ono už to tak nějak bývá, že výrobce procesoru určí syntaxi asm a instrukční sadu. To je skutečná realita.

    Proč GNU třeba nevymyslelo nové, nekompatibilní Céčko? Apod..

    Ne ne, vy se proberte, a vraťte se do reality. Jestliže je jednou určen standard pro x86, který určí výrobce procesoru, tak by měl být závazný a platný.

    A jen tak mimochodem, první procesor z řady x86 vznikl roku 1978, kde byl mimo jiné ustanoven i standard syntaxe. Projekt GNU byl podle stránek gnu.org založen roku 1983, takže alespoň si ověřte fakta, než začnete tvrdit, cituji: "GNU projekt vznikl v dobe, kdy se Intelu jeste ani nesnilo o x86 architekture".

    První zmínky o GCC jsem našel z roku 1987. Přesněji se mi to nepodařilo nalézt.

    Takže pokud realita podle Vás jsou fakta vycucaná z prstu, tak o takovouto realitu opravdu nestojím.

  • 26. 2. 2003 9:28

    anonymní

    Prvy 32-bitovy procesor x86 pochadza z roku 1985. GNU aplikacie na 16-bitovych procesoroch nespustite, bodka.

  • 26. 2. 2003 9:57

    Miloslav Ponkrác (neregistrovaný)

    Platforma x86 vznikla v roce 1978. Tečka. Není pravda, že všechny GNU aplikace nepoběží na 16-ti bitových procesorech. Tečka. A stále GCC vzniklo až po existenci 32-bitového procesoru 80386. Tečka.

  • 26. 2. 2003 10:24

    Pichi (neregistrovaný)

    Neni pravda, ze v dobe vzniku gcc byl nejaky Intel x86 standart, byl to "standart". Tecka. Gcc pouziva standart, ktery je standart na jinych platformach, nez jsou nejaky IBM PC. Gcc pouziva standart, ktery je standartem na desitkach jinych architektur. Gcc nemuze byt vazane na jednu obskurni proprietarni architekturu jedne obskurni firmy. Tecka.

  • 26. 2. 2003 11:35

    Miloslav Ponkrác (neregistrovaný)

    GCC si zavedlo svůj pseudostandard. Tečka. Asm je vždy vázán na proprietární architekturu, ať je od jakékoli firmy. Tečka.

  • 26. 2. 2003 17:14

    anonymní

    GNU si zaviedli svoj "vlastny pseudostandard", ktory sa z historickych dovodov nazyva at&t syntax.

    Asm nie je vzdy viazany na konkretnu platformu, ale ma mnoho spolocneho na rozlicnych platformach. Instrukcie ako "mov reg, mem" (x86) alias "ld reg, mem" (ppc) je mozno urobit len obmedzenym mnozstvom sposobov.

  • 26. 2. 2003 22:28

    pharook (neregistrovaný)

    Tak ještě jeden pohled na věc.

    Došlo tady někde i ke srovnávání s M$ a jeho pseudostandardy. Ano, zlobím se na M$, že vytvořilo svůj formát dat, který byl dlouhou dobu nedokumentovaný, a i dnes je natolik vázaný na platformu, že je velmi obtížné, ne-li nemožné ho kompletně a správně implementovat.

    Assembler jako programátorský nástroj, vázaný na hardwarovou platformu je jistě dobré standardizovat a standardu se držet. Nicméně netlačíme gas a as někam, kam původně vůbec nepatřil, a z velké části nepatří ani dnes?

    gas byl původně navržen a vyvinut jako mezivrstva mezi programovými bloky jednoho projektu - gcc. Takové na něj byly i požadavky - měl být v rozumných mezích čitelný člověkem pro debugging výstupu gcc, měl být snadno generovatelný z RTL gcc, a snadno parsovatelný (proto i požadavek na jednoprůchodový parsing), a měl být v širokých mezích platformně nezávislý, tak jak mělo být nezávislé i gcc.

    as ovšem začal být mnohými programátory používán jako assembler (k čemuž nebyl původně určen, původně byl jen člověku čitelným mezistupněm interakce mezi dvěma programy jednoho projektu), ano, bezpochyby i proto, že jiný použitelný assembler v té době neexistoval.

    Mnoho lidí ho od té doby používá. Pak se objevili tvůrci nasm, vytvořili jeho port pro unixy (nebo jen pro linux? To nevím), čímž se zaplnila i zmíněná mezera - proč by měl projekt GNU překopávat něco, co svému původnímu a primárnímu účelu (tedy meziprocesové komunikaci) slouží velmi dobře?

    Nehledě na to, že to nyní, když se ukazuje, jaká je obliba as i mezi "lidskými" programátory, nakonec i dělá.

    A co se týče srovnání s M$... as byl od svých začátků detailně dokumentován, nedá se tedy příliš považovat za uzavřený formát. Dle mého názoru ho ale nelze považovat - v hranicích, které jsou jeho primárním cílem - za nestandard.

  • 27. 2. 2003 15:45

    anonymní

    Ano, s tímto skoro úplně souhlasím. Gas prostě jako mezivrstva, která se neměla používat pro ruční programování, to beru. Potom souhlasím i s tím, že ho nelze, a zde je důležitá vsuvka, v hranicích svého určení, považovat za nestandard. Pokud přijmu, že má být vnitřním formátem pro překlad, pak O.K..

    Pak se ale neměl stát ani nástrojem pro on-li asm.

  • 26. 2. 2003 17:10

    anonymní

    Platforma x86 mohla vzniknut v '78, ale to neznamena, ze bola pouzitelna. Nebavime sa tu ani o 8080, Z80, ani 8008. Pouzitelnou sa stala az objavenim 80386. A urcite v roku 1985, vsetci ludia co pracovali na GNU projekte, sa ponahlali vyhodit svoje DECy a Suny, len aby si mohli kupit procesor, ktory sa rozsiril az zaciatkom devatdesiatych rokov.

    Ked sa uz bavime o 16-bitoch a GNU aplikaciach, tie su urcene len pre 32-bit a vyssie. Tie, ktore bezia v DOSe (djgpp) pouzivaju extender (go32), a bezia v 32-bitoch tiez. Nie, ze by nenarazali na ine obmedzenia, vsak ano (napr. 8+3).

  • 27. 2. 2003 15:46

    anonymní

    Platforma x86, a to použitelná vznikla v roce 1978. Ve skutečnosti vznikla dříve, ale tehdy se dala na trh se vším všudy. Použitelná byla okamžitě.

    Myslím, že sám chápete, že Z80 ani 8080, atd. není platforma x86.

    80386 přinesla pro platformu 32 bitů, nic více a nic méně.

    Jinak nesmíte rozšíření platformy x86 datovat podle toho, kdy se rozšířil v Čechách, to zajisté také chápete.

  • 28. 2. 2003 8:03

    Pichi (neregistrovaný)

    Clovece, slysel jste nekdy o 8086? Copak asi tak znamena x86? Jste si jistej, ze x86 je 32bitova architektura a byla ji hned od zacatku v roce 78? Jste si jitsej, ze mate mozek?

  • 26. 2. 2003 17:01

    anonymní

    Uvod z "info gas":

    The GNU Assembler
    =================

    GNU `as' is really a family of assemblers. If you use (or have used) the GNU assembler on one architecture, you should find a fairly similar environment when you use it on another architecture. Each version has much in common with the others, including object file formats, most assembler directives (often called "pseudo-ops") and assembler syntax.

    `as' is primarily intended to assemble the output of the GNU C compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried to make `as' assemble correctly everything that other assemblers for the same machine would assemble. Any exceptions are documented explicitly ( Machine Dependencies). This doesn't mean `as' always uses the same syntax as another assembler for the same architecture; for example, we know of several incompatible versions of 680x0 assembly language syntax.

    Unlike older assemblers, `as' is designed to assemble a source program in one pass of the source file. This has a subtle impact on the `.org' directive ( `.org' Org.).

    ------------
    K nasm: Pozor na verziu! Vsetky maju verziu 0.98.nieco, pricom to nieco je dolezite. V sucasnosti je mozne pouzivat preprocesor, proti ktoremu mali autori kedysi velke namietky.