Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Akú úlohu zohráva jazyk assembler v dnešnej dobe?

Dobry,
mam otázku. Vedel by mi niekto vysvetliť akú úlohu zohráva jazyk assembler v dnešnej dobe? Co presne sa nim píše? Prečo sa ešte používa ked ma uz vise 50 rokov? Pýtam sa preto lebo ucim sa zaklady v C a coraz castejšie sa stretavam aj s pojmom assembler. Podla toho co som si precital z netu tak je to zakladný jazyk procesora no nechápem potom preco sa najviac použiva C a nie assembler, ked je taký dobrý ze nepotrebuje na chod prakticky nic, ziadne knižnice, ani preklad, ani nic. Ked som tomu správne pochopil tak assembler je uz sam o sebe zdrojový kod, ktorý vie CPU hned vykonat, či?

Změna předmětu, původně: assembler (host)

Předmět Autor Datum
Má smysl v případě, že vývojář chce mít absolutní kontrolu nad výsledným programem. Zejména když chc…
Wikan 08.10.2018 21:43
Wikan
A dodám: rozdielom je aj prenositelnosť stejného kódu medzi rôznymi platformami. "assembler" (špatn…
Mlocik97 08.10.2018 21:52
Mlocik97
Assembler má výhody v: možnosti kvalitného/výkonného programu, vyžadujúceho len veľmi malé prostried…
qwertzzz 09.10.2018 12:13
qwertzzz
Překladač potřeba je, ale je oproti překladačům vyšších jazyků relativně primitivní. Program v C můž…
Wikan 09.10.2018 13:03
Wikan
Takže na assembler nepotrebujeme žiadne vysokoúrovňové IDE, ani prekladače? Stačí ho napísať v Notep…
Mlocik97 09.10.2018 13:36
Mlocik97
Dobre, niecomu som pochopil, a niecomu nie. A este sa chcem spytat ze moze sa v assembleri naprogram…
gtgzhj 09.10.2018 19:53
gtgzhj
Dříve se dělaly hlavně v assembleru. Ale v současné době je to už prakticky nemožné. Celý vývoj by b…
Wikan 09.10.2018 19:58
Wikan
áno môže sa naprogramovať v assembleri aj nejaka hra. Takou hrou je napríklad aj RollerCoaster Tycoo…
Mlocik97 09.10.2018 20:00
Mlocik97
si jen tipnu, nejsem programátor a ani mě to moc nezajímá. píšou se v něm drivery; aspoň ta jejich…
lední brtník 08.10.2018 22:01
lední brtník
Assembler je jazyk symbolických adries, nebo instrukcií.. Ja sa ani nečudujem otázke, keď vidím takú…
pozorovateľ 08.10.2018 23:27
pozorovateľ
I programovací jazyky jako C umožňují napsat kus kódu v assembleru. Píšou se v něm části kódu, které…
Jan Fiala 09.10.2018 05:22
Jan Fiala
Také si přihřeji z vlastní praxe... Použití asembleru vede na minimální velikost programu. To mělo v…
Kyncl 09.10.2018 09:21
Kyncl
Jakou úlohu hraje: člověk ho použije především tam, kde potřebuje mít program (či jeho část) rychlý,… poslední
gilhad 12.10.2018 18:46
gilhad

Má smysl v případě, že vývojář chce mít absolutní kontrolu nad výsledným programem. Zejména když chce dosáhnout maximálního výkonu či minimální velikosti programu.
CPU vykonává strojový (nikoliv zdrojový kód) a to není to samé co assembler. Ale má k němu velice blízko, je to v podstatě strojový kód zapsaný v čitelnější podobě.

A dodám:

rozdielom je aj prenositelnosť stejného kódu medzi rôznymi platformami. "assembler" (špatný pojem), teda správnejšie jazyk symbolických inštrukcií je viazaný "často" resp. vždy viazaný na hardware. Samotný jazyk je navržen pre operácie veľmi tesne nad hardwarom. To je veľký rozdiel od Céčka, ktoré keďže je viac "odviazaný" od HW, má možnosť bežať na rôznych strojoch so stejným kódom, ale len s veľmi malými zmenami v kóde.

Assembler má výhody v:

možnosti kvalitného/výkonného programu, vyžadujúceho len veľmi malé prostriedky.
možnosti pracovať veľmi tesne nad HW (a mať kontrolu v podstate nad všetkým, nad každým bajtom programu v pamäti a nad každou inštrukciou).

Céčko výhody v:

Prenostitelnosť medzi rôznymi HW platformami
Efektivita psania kódu.

Samozrejme to neni napísané presne, ale pre snažil som sa to napsať čo najpochopitelnejšie pre laika.

Assembler má výhody v: možnosti kvalitného/výkonného programu, vyžadujúceho len veľmi malé prostriedky.

Takže na assembler nepotrebujeme žiadne vysokoúrovňové IDE, ani prekladače? Stačí ho napísať v Notepade (Poznamkový blok) a spustiť cez cmd.exe a pojde to aj vo formáte .txt?

možnosti pracovať veľmi tesne nad HW (a mať kontrolu v podstate nad všetkým, nad každým bajtom programu v pamäti a nad každou inštrukciou).

tu kus nechápem, co znamená že pracuje veľmi tesne nad HW? A Ccko nemá kontrolu nad všetkým, nad každým bajtom a inštrukciou?

Překladač potřeba je, ale je oproti překladačům vyšších jazyků relativně primitivní.
Program v C může být napsaný tak, že funguje bez úprav nebo jenom s malými úpravami na mnoha procesorech, které nejsou vzájemně kompatibilní. Takže opravdu není možné říct, jaké budou reálně použité instrukce. To už si obstarává překladač.

Takže na assembler nepotrebujeme žiadne vysokoúrovňové IDE, ani prekladače? Stačí ho napísať v Notepade (Poznamkový blok) a spustiť cez cmd.exe a pojde to aj vo formáte .txt?

Otázka začiatočníka.... nejaký kompilér alebo interpreter je potreba vždy. A taktiež poviem že IDE netreba nikdy, ale používa sa pre zjednodušenie programovania a je to jednotné rozhranie pre kopec toolok, IDE ponúka snippsety, sugesce, rozhranie pre debugovanie, rôzne formátovacie nástroje, aj integrujú kompiléry atd atd. Ale kludne aj Céčkový program môžete písať v poznámkovom bloku, resp. v akomkoľvek editore ktorého output je v plaintext formáte. Formát súboru ako .txt nemá nič spoločné jak so súborom samotným tak s jazykmi a kompilérmi. Žial formáty a možnosti pomenovania súborov dosť laikov mätie Windows. Ale v Linuxu nieje nič neobvyklé že súbor nemá príponu. A možno prekvapím, ale môže existovať aj platný súbor s názvom ".........." nebo dokonca aj so znakom zalomenia riadku. Viac bys pochopil kdybys pracoval s Unixovými príkazmi, od ls, mkdir, shred až napr. cez presmerovania a pak až po pokročilejšie veci. Ostatne pojem "vyžadujúceho len veľmi malé prostriedky" znamená že zatiaľ čo výpočet 15 faktoriál by v programe napísanom v Céčku trval trebárs pol sekundy,... tak v programe napísanom v assemblery to trvalo 100ms. (to je príklad, záleží od samotného HW, od toho jak je to napsané, jakým kompilérom kompilované, rôzne optimalizácie atd). A taktiež aj to že zatiaľ čo program v Céčku môže zaberať v RAM 2 kilobajty, tak ten istý v assemblery môže zaberať 1 kilobajt. (jejich skompilovaná binárna verze).

tu kus nechápem, co znamená že pracuje veľmi tesne nad HW? A Ccko nemá kontrolu nad všetkým, nad každým bajtom a inštrukciou?

Céčko priamu kontrolu nemá. Dokáže pracovať len s tým čo mu umožní systém. Samotný program v Céčku je oddelený od HW akousi medzivrstvou tvoreného zo pseudoAPI systému. Díky tomu nieje možné programom zasahovať do behu iného programu. Když si v Céčku alokuješ pamäť, tak si tú pamäť poptávaš práve od systému, ktorý jasne určí že od tadiaľto po tadiaľto môže program zapisovať bity, a mimo toho priestoru program pamäť akoby nevidí. Assembler ale nebeží nad systémom, a preto má možnosť priamo zasahovať do ktorejkoľvek časti pamäte (samozrejme aj tu je malá medzivrstva, nejaké ochany má processor aj v sebe, ale je tá vrstva omboho tenšia). Ešte treba zmieniť že v processore sa inštrukcie jednotlivých processov vykonávajú v sérii. Processor nedokáže pararelne obslúžiť všetky processy. Systém má nastarosti práve aj to že konkrétny čas processora priradí určitému processu, medzi týmito časmi dochádza k prerušeniam (ešte bych tu mohol plácnuť pojem interupt handler, HALT, a pod. ale to už je príliš veľa na laika). Ty to ako uživateľ možno nevnímaš, to preto lebo tie časi "obmien" sú extrémne krátke. Ale processor má tiež akýsi zásobník v ktorom sú naukladané inštrukcie, ktoré sa postupne budú vykonávať. Ale to už asi jdu príliš do detailov. Inak assembler resp. jazyk symbolických inštrukcií aj napriek tomu jak je "starý" je snaď najdôležitejší jazyk vôbec.

Dříve se dělaly hlavně v assembleru. Ale v současné době je to už prakticky nemožné. Celý vývoj by byl hodně složitý, dlouhý a tedy i drahý. Navíc spousta her se dělá pro více platforem najednou. To ale nevylučuje, že určité malé (ale výkonově kritické) části v něm mohou být napsány.

Assembler je jazyk symbolických adries, nebo instrukcií.. Ja sa ani nečudujem otázke, keď vidím takúto definíciu assembleru na wiki.. hrôza.
Pokým sa toho človek "nedotkne", tak to z toho nemôže pochopiť. Našťastie tam bolo ešte vysvetlenie:

Nejedná se tedy o jeden konkrétní jazyk, ale spíše o druh jazyka. Symbolickou reprezentaci tvoří zpravidla výrobce procesoru a je založena na mnemotechnických zkratkách, které vyjadřují, co daná strojová instrukce dělá, označují symbolicky registr, slovní zkratku podmínky a podobně. JSA je proto závislý na konkrétním procesoru a zapsaný program je obtížně přenositelný na jinou platformu(na rozdíl od vyšších programovacích jazyků). Assembler nie je žiadny jazyk, tobôž jazyk adries.

Také si přihřeji z vlastní praxe...
Použití asembleru vede na minimální velikost programu. To mělo v minulosti význam, když byly paměti 1-2kB (sic!)!!
Programátor ale musí celý program víceméně "držet v hlavě," i když je dobře dokumentovaný, a samozřejmě se píše jenom pro určitý typ procesoru, takže je nepřenosný.

Jakou úlohu hraje: člověk ho použije především tam, kde potřebuje mít program (či jeho část) rychlý, nebo malý, nebo mít nad ním plnou kontrolu, nebo použít speciální schopnosti HW (ať už procesoru, nebo jiných zařízení), nebo nemá jiný vhodný jazyk k dispozici

Stroje ho používají často při překladu vyšších jazyků (například C se klasicky nejdřív přeloží do assembleru, potom se ten assembler přeloží do strojového kódu, který následně čte procesor a (např u Intelu) ho interpretuje vlastním mikrokódem.

Do assembleru se vyšší jazyky překládají proto, že je to snazší a líp se při tom dělají optimalizace (překlad Céčka se zdrojákem souvisí velmi volně) a assembler umožní přeložit jednotlivé kusy kódy, knihovny a tak nezávisle na zbytku a až pak to pospojovat a určit, přesně adresy, kde budou které funkce, data ... čili optimalizátor toto nemusí deailně řešit. Zároveň, protože ho používá vícero vyšších jazyků jako mezistupeň, tak je zbytečné překladač assembleru zahrnovat do každého zvlášť (přičemž takový překladač assembleru klině může dělat i víc průchodů pro optimální překlad).

Psát se s ním dá cokoli, co se dá napsat v jakémkoli vyšším jazyce, jen to často může být pracnější. A je to náchylnější k lidským chybám. Třeba takový MS DOS byl v assembleru napsaný celý, včetně utilit.

Assembler je vlastně špatné označení - assembler jako takový je název překladače, který překládá jazyk symbolických adres do strojového kódu (a linker pak ty přeložené kusy spojuje do přeložených knihoven či programů), ale vžil se i jako název pro ten jazyk, který překládá.

Samozřejmě není jen jedinný assembler - pro různé procesory jsou různé assemblery a často i pro jeden procesor je víc různých dialektů, které se výrazně liší.

C se používá proto, že má spoustu knihoven (ne že by je nemohl mít i assembler), je rozšířený a píše se v něm snáze. A protože je vlastně nezávislý na platformě, pro kterou se píše, takže tentýž zdroják lze snadno přeložit pro různé procesory.

Proč se ještě používá, když už má 50 let? Protože zkrátka pro daný účel nemáme nic lepšího. Je zajímavé, že se na to ptáš v jazyce, který je více než 800 let starý (Česky psaná literatura se objevuje od 14. století. První písemné památky jsou však již z 12. století. https://cs.wikipedia.org/wiki/%C4%8Ce%C5%A1tina ) :)
Assembler se samozřejmě taky postupně vyvýjel, nejen, jak se vyvýjely procesory, ale i jak bylo více výpočetní síly, takže mohl umoňovat i složitější konstrukce a také jak se měnil náhled na jeho úlohu v programování. (něco jiného je překládat ho na moderním PC a něco jiného na počítači s kazeťákem a 16 kB RAM, kam se musel vejít neje překladač, ale i překládaný kód a navíc obrazovka)

Mimochodem se dodnes používá nejen pro psaní ovladačů, ale čaqsto i u mikrokontrolerů typu např. populárního Arduina, zvláště u nižších HW verzí, nebo u doma vyráběných počítačů (např. https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA )

Pro své použití samozřejmě potřebuje překladač, který ho přeloží do strojové podoby, ale v té strojové podobě už je schopen běžet.

Většinou ale stejně používá i nějaké knihovny (protože proč psát stejné věci pořád dokola znovu), často i volání OS a rozhodně není pravda, že by si v počítači mohl (na rozdíl od C) dělat co chce, pokud tam už běží nějaký solidní OS. Pak se na uživatelem spouštěné programy vztahují stejná omezení (co se týče přístupu k paměti, disku, jiným zařízením), bez ohledu na to, v jakém jazyce jsou napsaná.

Konec konců, proč se prodávají počírače, když si je člověk může postavit z desek, nebo z integráčů, nebo třeba i z tranzistorů? Když jsou ty tranzistory tak dobré, tak nechápu, proč prodávat hotové počítača. (nebo proč používat C, když v assembleru to jde taky a ještě si to člověk může přiohnout víc dle svých potřeb ...) Jestli to nebude tím, že C a rozsáhlé knihovny na cokoli a počítače jsou na méně náročné použití jednodušší, než asssembler a tranzistory, které toho zvládnou případně i víc...

Zpět do poradny Odpovědět na původní otázku Nahoru