Programování v assembleru

hmmm

Re:Programovani v assembleru
« Odpověď #30 kdy: 26. 07. 2013, 23:02:48 »
Dost se to tu zvrhlo k diskuzi teoretiku. Zpet k tazateli.

Pises, ze jsi uz videl Pascal, Delphi, C... Muzes zacit tim (nebo aspon ja tak zacinal), ze v techto jazycich napises cast kodu v assembleru. Vsechny tri proste umeji vkladat assemblerovske instrukce. (Vykasleme se ted na teoretiky, kteri urcite znaji nejakou specifikaci nejakeho jazyka a kompilator, ktery assembler uvnitr daneho jazyka nezkousne. proste v normalnim Borland Pascalu nebo Delphi jde psat i assembler.) Oblibeny postup je takovy, ze vezmes nejakou proceduru, o ktere si myslis, ze na ni stacis, kouknes na ni debuggerem a zacnes studovat, jestli by neslo nejakou sekvenci instrukci napsat jinak. (Pouziva se vubec jeste "xor ax ax"?)

Pro zacatek ti staci funkce pro soucet dvou cisel. Nejslozitejsi bude pochopit, jak se do funkce predavaji parametry (registry versus zasobnik) a jak se vraci vysledek.

Dalsim v MS-DOSu oblibenym cvicenim byly ruzne figle okolo klavesnice. (Blikani diodama, cteni vsech klaves...) Zorazovani pomoci preruseni nebo zapisem do videopameti. Cteni sektoru na hardisku, formatovani disket. Ale tohle vsechno neni ani tak o assembleru, ale spis o tom, jak obsluhovat dany hardware.

Jednou jsem resil nasobeni dvou matic. (Vadilo mi, jak tam Delphi porad cpalo nejakou instrukci pro vyjimku nebo nejake preruseni, kdyz pretece vypocet.)

Zkousej a ptej se.


Mirek

Re:Programovani v assembleru
« Odpověď #31 kdy: 27. 07. 2013, 08:52:27 »
Opravdu bych nezavrhoval začátek s nějakým 8 bitem. Pro začátek se třeba podivat na pár příkladů tady http://www.avr-asm-tutorial.net/avr_en/ - http://www.avr-asm-tutorial.net/avr_en/AVR_TUT.html

x32 a x64 je pro začátek určiťe složitější.

IDDQD

Re:Programovani v assembleru
« Odpověď #32 kdy: 27. 07. 2013, 11:25:36 »

Jenže to jim nevysvětlíš, pokud si někdo myslí, že se programovat v ASM naučí tím, že si přečte instrukční soubor, není mu pomoci.
Nemyslím si, že se někdo naučí programovat pro AVR tím, že si přečte jeho instrukční sadu, ono ASM není jen o instručkní sadě, ale i o znalosti řady fíglů, jak program dlouhý na padesát řádek přepsat na deset, ale nebude se muset obtěžovat se složitou správou nedej bože segmentací paměti, dokumentaci k přerušení, komunikaci s OS, atd. Tedy určitě to zvládne snáz, radíš dobře.

IDKFA

Re:Programovani v assembleru
« Odpověď #33 kdy: 31. 07. 2013, 00:25:35 »
Jenže to jim nevysvětlíš, pokud si někdo myslí, že se programovat v ASM naučí tím, že si přečte instrukční soubor, není mu pomoci.
To je asi ako tvrdenie, ze sa clovek nauci hrat na gitare tym, ze bude vediet pomenovat struny. To ale byva skor nutna sucast ako hranica, po prekonani ktorej by to mal uz clovek zvladat.

ono ASM není jen o instručkní sadě, ale i o znalosti řady fíglů,
Tie sa ale clovek nauci bezne az casom (napriklad ho napadnu). A to je trochu v zhode s tym, co mu radili.

jak program dlouhý na padesát řádek přepsat na deset,
To nemusi byt vzdy vyhoda. Ked nieco napises v C a ASM, tak po porovnani mozno uvidis - jednoduchsie, priamociarejsie a lepsie citatelne riesenie v ASM je dost casto pomalsie ako ten "hnus" vygenerovany od prekladaca C. Preto ma pisanie ASM v dnesnej dobe vyznam nie tam, kde je treba rychlost, ale tam, kde to inak napisat nejde...

txt

Re:Programovani v assembleru
« Odpověď #34 kdy: 31. 07. 2013, 14:12:23 »
Nás na architektuře počítačových systémů učily v debugu (např. zpomalení/zrychlení hodin), a v simulátoru Marie (http://computerscience.jbpub.com/ecoa/2e/student_resources.cfm). Na to pak navázal nějaký 8b jednočip.

Nějaký ty materiály bych na disku našel.


Re:Programovani v assembleru
« Odpověď #35 kdy: 31. 07. 2013, 16:25:33 »
A co kniha Učíme se programovat v jazyce Assembler pro PC? Ta ti taky nevyhovuje?

bruce

Re:Programovani v assembleru
« Odpověď #36 kdy: 01. 08. 2013, 21:49:51 »
Opravdu bych nezavrhoval začátek s nějakým 8 bitem. Pro začátek se třeba podivat na pár příkladů tady http://www.avr-asm-tutorial.net/avr_en/ - http://www.avr-asm-tutorial.net/avr_en/AVR_TUT.html

Tento navod+datasheet +instrukcna sada je asi najviac uceleny material o programovani 8bit Atmelov v asembleri, ktory sa da najst na webe. Sam som takto pred nejakou dobou zacinal a skusal rozne veci. Zacal som blikanim s ledkou, potom som pridal timer-e, neskor UART a ovladanie znakoveho LCD. Podla mna je to dobry sposob ako sa zoznamit s tym, ako procesor vo vnutri vlastne funguje. Nevyhodou je, ze castokrat to nebolo o programovani ale o hladani chyby v zapojeni celeho obvodu.
Mozno existuje lepsi sposob ako sa naucit programovat v assembleri. Ale ja som chcel som vyskusat avr + assembler a nic lepsie som nenasiel. Na webe je dost navodov ako riesit ciastkove problemy ale asi nenajdes komplexny navod v zmysle "How to become assembler pro in a year". Ak by existoval, uz by tu urcite niekto dal linku ;)

Tomas

Re:Programovani v assembleru
« Odpověď #37 kdy: 01. 08. 2013, 23:54:48 »
Jak uz tady bylo nekolikrat receno, asi bych sel do toho AVR. Take jsem si s tim kdysi hral. Na x86/64 smysl assembler IMHO moc nema. Porazit optimalizator je skoro nemozne a kdyz vezmu v uvahu jeho prevahu s tim, ze muze kdekoliv a kdykoliv inlinovat kod dle svych potreb apod tak to nedokaze nikdo.

Assembler jsem pouzil snad jen v pripade SSE atd k urychleni vypocu. I tak uryhleni nebylo nikterak vyrazne. Optimalizator opet umel lepe usporadat poradi, aby byly instrukcni pipeline jak byt maji. Proste jsem to prepsal pomoci intristics a bylo.

Jedine kde pouzivam assembler je kdyz dostanu coredump s poskozenym stackem, nebo poskozenou pameti a navic nekdo zapomel vyexportovat symboly. V tomto pripade je velmi uzitecne vedet jak to funguje, co je EBP apod. Ja se to ucil na debugovani prelozeneho kodu a krokovani po instrukcich. To mi prijde takove prakticke, protoze vidis kod, ktery se opravdu pouziva.

Takze na hrani a pripadne HW zajimavosti jdi do AVR (i kdyz ARM ma taky moc peknej asm). Na efektivni praci zustan u C++ a /O2.



pepak

Re:Programovani v assembleru
« Odpověď #38 kdy: 02. 08. 2013, 07:54:40 »
Na x86/64 smysl assembler IMHO moc nema. Porazit optimalizator je skoro nemozne a kdyz vezmu v uvahu jeho prevahu s tim, ze muze kdekoliv a kdykoliv inlinovat kod dle svych potreb apod tak to nedokaze nikdo.
Assembler má i pro x86 smysl přinejmenším ze dvou důvodů:

1) S jeho znalostí člověk mnohem lépe pochopí, jak počítač i OS uvnitř fungují, a to mu umožní lépe psát programy ve vyšších jazycích.

2) Kompilátory nejsou bezchybné, čas od času je potřeba projít si debuggerem přímo vygenerovaný kód. To jde se znalostí assembleru, aspoň základní, o hodně lépe než bez ní.

Za sebe bych přidal ještě jeden subjektivní důvod - dobře napsaný assemblerový program je "krásný".

Souhlasím, že nemá smysl učit se assembler proto, abych mohl překonávat optimalizátor - i když i toho jde dosáhnout (typicky ve využití registrů pro lokální proměnné).

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:Programovani v assembleru
« Odpověď #39 kdy: 02. 08. 2013, 11:54:30 »
Diky za vsechny podnetne odpovedi, postupne prochazim navrhy a o vikendu se na to vrhnu.
Jen pro upresneni, assembler mne zajima primarne z duvodu jak psal pepak:
Citace
1) S jeho znalostí člověk mnohem lépe pochopí, jak počítač i OS uvnitř fungují, a to mu umožní lépe psát programy ve vyšších jazycích.
Nemam potrebu hrat si na boha a znovu-vynalezat kolo, jen zpevnit a rozsirit zakladnu znalosti a vedomosti v IT.

Libi se mi naznacena cesta zacit s 8bity a pokracovat dale. Koukam stale jake jsou moznosti simulace, pripadne i treba elektro stavebnice, dokumentace projektu etc. Pro nekoho kdo to zna nebo s tim ma zkusenost je to asi snadne a transparentni, ale pro mne je to dost zmatene, proto bych radeji nekoho, kdo by mi mohl poskytnout takovej brainstorming k tematu, aby takovy ty zmatecny myslenky zapadly na misto a na tom uz pak muzu zacit stavet.
Samozrejme ze asi po strasne moc ztravenym casu ctenim tuny nudnyho a zbytecnyho materialu byt to asi dal dohromady i sam, ale prijde mi zbytecne s tim ztracet cas, kdyz by stacila treba hodka dve klidne u piva s nekym, kdo to dava a ma tu zkusenost a ten zmatek mi rozptylil. Treba bych tomu dotycnemu mohl na oplatku taky nejak pomoci.
Prijde mi, ze nekteri lide se radi vydavaji za genialni, ackoliv zadnou realne pouzitelnou radu nabidnout nedovedou. Ja jsem schopen pochopit spoustu veci samostudiem, ale pokud necemu venujete nejakej cas, a stejnak na sobe vidite, ze ten pokrok neni takovy jako byste si predstavovali a ze se spise norite do jeste vetsi mlhy tak je lepsi se zeptat a od toho tady fora jsou krome sireni flame.

Tomas

Re:Programovani v assembleru
« Odpověď #40 kdy: 02. 08. 2013, 12:26:46 »
Diky za vsechny podnetne odpovedi, postupne prochazim navrhy a o vikendu se na to vrhnu.
Jen pro upresneni, assembler mne zajima primarne z duvodu jak psal pepak:
Citace
1) S jeho znalostí člověk mnohem lépe pochopí, jak počítač i OS uvnitř fungují, a to mu umožní lépe psát programy ve vyšších jazycích.
Ja si nemyslim, ze ti znalost jak funguje kernel a znalost instrukci a par triku pomuze programovat ve vyssich jazycich. Jestli ovladas C jak pises tak jsi presne na te vrstve, ktera je nejnizsi a jeste jakz takz dava smysl. Vzdyt kernel je taky psany z velke vetsiny v cistem C. Dokonce, kdyz se moc snazis kompilatoru pomoct, nakonec mu hazis klacky pod nohy.

Pokud ti jde o optimalizace tak se koukni na profilovaci nastroje a metriky, kterym se rychlost meri. Pak se optimalizace toci bud okolo slozitosti ma vypocet (asm zde nepomuze), nebo optimalizace pristupu do pameti (cache miss, page fault, apod - valgring/cachegrind pomuze a pripadne pametovych naroku. Ja se potkavam vetsinou s problemem nenazranosti, protoze uz dnes nikdo neresi pamet nebo nekolik vnorenych cyklu (lenost vytvorit index), ale jeste jsem v praxi nepotkal priklad, kde by assembler pomohl. Potkal jsem ho pouze, kdyz jsem si hral se zpracovani videa apod., proste pro srandu. Na hrani super, to jo.

Dnesni vyvoj si nedovedu predstavit bez metaprogramovani a generik (C++ templates, stl, boost, poco, ...). To co napisu na jeden radek a bude v 99 procentech rychlejsi, se bude v asm psat tyden a druhy tyden ladit chyby. Koukni se spise na optimalizace aplikaci, to ti da mnohem vice do praxe a dokonce si myslim, ze je to to co hledas.

pepak

Re:Programovani v assembleru
« Odpověď #41 kdy: 02. 08. 2013, 12:43:16 »
Ja si nemyslim, ze ti znalost jak funguje kernel a znalost instrukci a par triku pomuze programovat ve vyssich jazycich. Jestli ovladas C jak pises tak jsi presne na te vrstve, ktera je nejnizsi a jeste jakz takz dava smysl.
Zrovna konkrétně v C ti znalost assembleru sakra pomůže, protože s její znalostí se stávají evidentními "axiomy Cčka" (proč je false nula, proč pointerová aritmetika funguje tak, jak funguje, atd.). Ale ve větší nebo menší míře to pomůže i v ostatních jazycích. Protože se naučíš principy, proč a jak něco funguje, ne básničku, že to funguje.

Citace
Pokud ti jde o optimalizace
Explicitně psal, že o ty mu nejde.

Tomas

Re:Programovani v assembleru
« Odpověď #42 kdy: 02. 08. 2013, 13:00:32 »
Zrovna konkrétně v C ti znalost assembleru sakra pomůže, protože s její znalostí se stávají evidentními "axiomy Cčka" (proč je false nula, proč pointerová aritmetika funguje tak, jak funguje, atd.). Ale ve větší nebo menší míře to pomůže i v ostatních jazycích. Protože se naučíš principy, proč a jak něco funguje, ne básničku, že to funguje.
Citace
Pokud ti jde o optimalizace
Explicitně psal, že o ty mu nejde.
Jen poznamka: Pointerovou aritmetiku asi pochopi kazdy i bez asm (kdyz pouzije memory view tak si to muze i nasimulovat). Ale takovy aligning, jeho dusledky na rychlost apod. ho stejne donuti delat jen prekladac (asm te nedonuti, tam si muzes delat co chces). A kdyz se zajimas o tyto detaily, tak si je muzes precist u kompilatoru. Mne osobne to dava vic informaci a mene zmatku, ale asi jsem az moc zamereny na efektivitu sveho casu.

Psal, ze mu nejde o asm optimalizace, ale mozna jsem to prehledl. Tak nic, byla to jen rada...

txt

Re:Programovani v assembleru
« Odpověď #43 kdy: 02. 08. 2013, 13:48:06 »
Assembler AVR je "pěkný", ale oproti x86 má odlišný přístup. Když píšeš v C, tak AVR studio automaticky generuje texťák s asemblerem a co jsem tak testoval, tak bych to v asm lépe neudělal (při přerušení se ukládají pouze ty registry, u kterých je to nezbytné, když to jde, jsou vybrány instrukce provedené v jednom cyklu, atd.). Simulátor v AVR studiu neni nic moc (zkoušel jsem verzi 5, v6 nevim). Pokud se chceš učit opravdu na tomhle, tak by to chtělo připojení přez JTAG, aby sis mohl při krokování vypsat obsah registrů/paměti (nebýt odkázán na výstup pomocí blikání diody/lcd). Pokud není tvůj primární zájem elektronika/embedded, přimlouval bych se za nějaký simulátor/vývojové prostředí běžící na PC.

Pro pochopení jak to uvnitř funguje, je dobré číst o různých architekturách takové ty věci, jako blokové schéma CPU, průběh zpracování instrukce...

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:Programovani v assembleru
« Odpověď #44 kdy: 02. 08. 2013, 15:09:18 »
Objevil sem pred chvilkou http://www.teach-sim.com/. Vypada to vcelku zajimave pote, co jsem to tak letmo proletl. Nema s tim nekdo zkusenost nebo nejaky nazor?