abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:11 | Nová verze

    Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    včera 22:22 | Bezpečnostní upozornění

    Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].

    Ladislav Hagara | Komentářů: 7
    včera 21:11 | Zajímavý článek

    V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.

    Ladislav Hagara | Komentářů: 18
    včera 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    8.5. 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 32
    8.5. 20:22 | IT novinky

    Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.

    Ladislav Hagara | Komentářů: 6
    8.5. 12:55 | Nová verze

    Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 1
    7.5. 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 10
    7.5. 18:33 | IT novinky

    Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.

    Ladislav Hagara | Komentářů: 4
    7.5. 17:11 | Nová verze

    Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (8%)
     (13%)
     (16%)
    Celkem 148 hlasů
     Komentářů: 10, poslední 8.5. 17:35
    Rozcestník

    Dotaz: "Univerzální" (dis)assembler

    MaSo avatar 4.1.2016 20:33 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    "Univerzální" (dis)assembler
    Přečteno: 959×
    Zdravím, zkouším si navrhnout vlastní CPU do CPLD/FPGA. Mám tím pádem i vlastní instrukční sadu s vlastními opkódy.
    Můj dotaz je tímto jednoduchý:
    existuje nějaký "univerzální" (dis)assembler, který bych naučil moje instrukce+opkódy?
    Zkouším si psát vlastní (hehe, v BASHi :-D ), ale je to peklo; parsovat řádky a v nich třeba i matematické operace, kde se až výsledek "připojí" k dané instrukci, atd. Třeba separovat mezery, uvozovky, apostrofy jako vstup pro instrukci, ...
    CPU bude sloužit jako řídící prvek pro konkrétní aplikace, které vyžadují interakci s nadřazeným systémem. Momentálně se řídím PICkama, ALE něco zjednodušuji a něco vylepšuji - více registrů, mnohonásobně rychlejší zpracování instrukcí (zatím se mi vše daří vecpat do 2 fází hodin, tzn. využití rise i fall hodin) a to včetně zpracování přerušení - uložení/výběr adresy.
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )

    Odpovědi

    4.1.2016 21:59 pako
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Jestli existuje "universální" assembler nevím, ale parsovat cokoliv v bashi zní jako docela krkolomná akce. Určitě snáze by to šlo s Pythonem (pro sh-like syntaxi obsahuje modul shlex, už jen to by Vám vyřešilo zábavu s mezerami a řetězci v uvozovkách) nebo Perlem. Obecněji se asi budete chtít podívat na nástroje lexikální analýzy (jako flex/bison).
    5.1.2016 01:00 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Nic univerzálního neexistuje.

    Prostě příkazy znáš tak si napiš vlastní překladač který poběží na jiné platformě a tam pak napíšeš překladač který už poběží na tvém CPU a pak už budeš soběstačný.
    5.1.2016 21:19 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Hustý, 8 bit? Jak moc RISC? Já před pár lety zkoušel psát emulátor instrukcí pro x86 a to v perlu. Ty regexpy se daly krásně použít na parsování řetězců 010101 :-D. Mám dojem, že jsem přepsal všechny instrukce z pentia datasheetu, ale pak už jsem se na emulaci ve virtuálních registrech vykašlal :-/.

    Pokud chceš psát něco vlastního, tak si radši než BASH napiš parsovací funkce v C (i tam můžeš použít bitfieldy v packed struct). Ale pokud je to nějaká normální architektura a plánuješ ji rozvinout, tak si můžeš patchnout binutils a pak můžeš pracovat s objektovýma souborama. Jenom možná binutils bude asi mít problémy parsovat 8/16bit binárky.

    Horší by byl překladač.

    P.S. Napiš o tom hackování blog ;-).
    MaSo avatar 6.1.2016 20:03 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Jedná se o 8b data, registry, ... adresování až 13b (velikost instrukce je fixních 16b) (interní ROM) - původně bylo zamýšleno čtení programu z ext. SPI Flashky, k čemuž se možná vrátím (v simulátoru (Logisim, kde navrhuji i toto µCPU) mám hotovou "čtečku" EEPROMky 93C46 v 8b režimu). 64b (zatím - podpora až 256B) interní RAM pro data. Pro jednoduché aplikace - takové "SoC" by to mělo stačit - vše bude v jednom CPLD/FPGA čipu. Pokud se to nevleze do CPLD, tak to půjde do FPGA, kde už by to teoreticky díky internímu PLL mohlo šlapat až někde na 300-600MHz = 300-600MIPS.
    Momentálně se dá říct, že se jedná převážně o RISC (1 takt hodin, malá sada instrukcí, která se bude asi rozšiřovat - zatím je jen pár instrukci - chci doladit Assembler pro lepší testování s možnosti exportu přímo pro Logisim). Instrukci bude nejspíše přibývat, tak snad z toho nakonec nebude CISC... :-D
    Co se týče assembleru, tak nejvíce si rozumím s BASHem i když jsem našel na netu very-light parser assemleru v Pythonu (který vůbec neumím) a tak nějak jsem jej poladil pro mé účely - učím se s tím docela rychle. Netušil jsem, jak je Python rychlý na to, že je to jen "skriptovací" jazyk. A s tím C, nevím, no. Už jsem jej kdysi zkoušel (řízení krokáče přes paralelní port), toť vše :-D Co se mi tak zdá, tak Python má docela blízko k C, tak uvidím, co dál... Každopádně chci vykutit nějaký základní (dis)assembler, pak budu pokračovat v HW CPU.
    No blog, já zas nejsem na nějaké to rozepisování :-)

    Už jsem tak před rokem navrhoval komplexnější CPU (CISC), ale myslím, že jsem taky skončil u assembleru (který i docela fungoval), čímž to zhaslo :-/ )
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    7.1.2016 07:40 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Aha takže něco na úrovni PICu nebo picoblaze. S tím by asi měly binutils problém. Ale zase pro tak malý opcode prostor není problém napsat vlastní parser. A důležité je použít něco co umí pracovat s bitovými poli. V bashi je to dost o ústa :-D.

    Python určitě nemá blízko k C :-D, ale pokud na to máš už nějakej template tak proč ne. Já jsem původně zavrhl bison a flex parsování (makrojazyk, který se přeloží do C, trochu těžkopádná syntaxe a vykopírování třeba řetězců lehko vede k segfaultu při chyb programátora), ale nakonec jsem se k nim rád vrátil (od perlu).

    Blog klidně jen ukázky architektury :-D.
    MaSo avatar 7.1.2016 19:38 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Bitovém pole myslíš v parseru? (Tam nevidím problém, v minulém "projektu" CPU jsem to měl) Nebo myslíš instrukce v CPU pro bitové operace? také není problém, ale zatím je nemám.
    Hmm, dle mně se Python a C podobá, ale to je jedno, hlavně, abych to dotáhl do konce, ať už použiji cokoli... :-D
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    8.1.2016 10:36 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Myslím bitové pole v C struct definici. Například (náhodně vybrané z PIC32 kompilátoru):
    typedef union {
      struct {
        unsigned TBF:1;
        unsigned RBF:1;
        unsigned R_W:1;
        unsigned S:1;
        unsigned P:1;
        unsigned D_A:1;
        unsigned I2COV:1;
        unsigned IWCOL:1;
        unsigned ADD10:1;
        unsigned GCSTAT:1;
        unsigned BCL:1;
        unsigned :3;    //reserved
        unsigned TRSTAT:1;
        unsigned ACKSTAT:1;
      };
    } __I2C2ASTATbits_t;
    
    Tohle vlastně definuje přímo bity v nějakém 16 bit registru. Když pak uložíš nebo načteš nějakou proměnnou třeba z binárního souboru, tak máš hned rovnou přístup k jednotlivým hodnotám.
    MaSo avatar 8.1.2016 23:46 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    aha :-)
    Tak tak dalece k definicím jsem se zatím nedostal. A ono zatím nemám ani co definovat, ještě nejsou žádné "HW" registry. I když...
    ... mám už tam několik typů přerušení ("akce": enable, flag a clear).
    Programování bude čistě v asm., C implementovat nebudu - to je mimo mé schopnosti.
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    9.1.2016 09:34 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Tak hodně štěstí :-D. BTW Jaký FPGA vlastně?
    MaSo avatar 9.1.2016 17:29 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Dík no.... :-D
    Soustředil jsem se na Xilinx, nějaké hrátky byly zatím jen s nejnižším CPLD XC9536, doma mám pak XC95288 (nebo jak to je) a pak jestli se nepletu, tak nějakého Spartana-3 a Spartana-6 XC6SLX9 (11400 klopáků). Programátor mám Presto (podpora EEpromů/Flash, různé µ-controléry, podpora JTAG) od Asixu (česká firma) s podporu SW pro Linux (sic "jen" přes wine, ale funguje bez chyb). Psal jsem o něj blog tady na ábíčku.
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    9.1.2016 22:34 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Do XC9536 se to téměř určitě nevejde (tam je jen 36 registrů). Pokud chceš nějakou pamět programu, tak ideálně blockRAM v jednom z těch spartanu.
    MaSo avatar 10.1.2016 18:47 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    jj, tohle vím, použiji toho spartana... a RAMku mám navrhlou svou...
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    6.1.2016 23:51 Tomáš
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler

    Psát parser pro gramatiku ( ač jednoduchou ) není nic triviálního. Zvláště ne v bash. Podíval bych se na generátory parserů. Konkrétně na ANTLR. Tady je příklad assembleru. Má to 630 řádek z nich 1/4 jsou prázdné řádky.

    Další variantou jsou pak lex/flex a yacc/bison.

    Myslím, že na ten disassembler by šly tyto nástroje použít.

    MaSo avatar 7.1.2016 20:37 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    joj, tak to ANTLR vypadá, že je odpověď na můj dotaz. Sic nechápu, proč je tak složitě definované case insensitive instrukcí, ale i tak. Dále, co jsem se díval na příklad, tak zápis typu:
    blabla
      : x y
      ;
    
    jestli nepůjde zjednodušit stylem:
    blala: x y ;
    
    Jak budu mít trošku času, tak na to mrknu, zatím moc díky.
    Jen ještě nevím, co z toho vyleze, jestli JEN ověřuje syntaxi a až pak si musím ??sám?? vytvořit převod na strojový kód (hex/bin)nebo je tam další definice k hlubší analýze a převodu.
    Určitě se budu muset podívat na nějaký ten (RT)FM :-D
    Zatím moc díky!
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    8.1.2016 10:30 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Parsery fungujou tak, že si vytvoříš předpis jazyka například:
    whitespace + identifikátor + whitespace + číslo/jmémo proměnné + whitespace
    A v sekci, která tomuhle předpisu bude odpovídat získáš nějakou funkcí toho parseru to číslo nebo jméno proměnné a to použiješ pro vygenerování opkódu nebo nějaké akce (třeba EXIT u skriptu, v případě assembleru třeba vygenerování adresy návěští).

    U makrojazyka bison/yacc můžeš zapsat víc na řádek, oddělují se tuším znakem pajpou. Vtip je v tom, že za každej match můžeš hodit kus svého kódu. Ale řekl bych, že to bude nějak i u toho ANTLR. On je ten formát zápisu gramatiky dost jazykově nezávislý.

    Já používal jako úplně první seznámení seriál tady na abclinuxu "Jazyky a překladače".

    V případě převodu bin → asm se ale IMO parser nevyplatí.
    Jendа avatar 8.1.2016 10:44 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    jestli nepůjde zjednodušit stylem
    No minimálně v Bisonu to zdá se projde. Jinak já to píšu stylem tak mezi:
    foo:   bar
         | baz
         ;
    Ještě jsem za to vynadáno nedostal.
    Jen ještě nevím, co z toho vyleze, jestli JEN ověřuje syntaxi a až pak si musím ??sám?? vytvořit převod na strojový kód (hex/bin)nebo je tam další definice k hlubší analýze a převodu.
    Opět něco mezi :-). Nejen, že to ověří syntaxi, ale v okamžiku, kdy ti to žere kus vstupu, si tam můžeš přidat kus vlastního kódu - typicky to, co právě vygeneruje stroják. Např. (zjednodušeně)
    term_loop:  term_loop DUTOK_PLUS term {
                  $$.přidej_kód(nacpi $1 na stack);
                  $$.přidej_kód(nacpi $2 na stack);
                  $$.přidej_instrukci(ADD);
                }
                ;
    
    Vysoce užitečný byl předmět PP, bohužel k tomu nejsou použitelná skripta. Přemýšlel jsem, že něco napíšu, ale a) jsem lama, mé znalosti jsou na úrovni toho jednosemestrálního kurzu, b) efektivně by to znamenalo udělat step-by-step návod na řešení těch úkolů, které se každý rok recyklují.
    8.1.2016 11:32 tom
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Na prototypovani je asi nejrychlejsi perl. Podival bych se na implementaci

    http://search.cpan.org/~pscust/CPU-Z80-Assembler-2.15/lib/CPU/Z80/Assembler.pm

    a vzal si z toho pouzitelne knihovny, treba

    http://search.cpan.org/~pscust/Asm-Preproc-1.02/lib/Asm/Preproc.pm
    8.1.2016 17:12 Zopper | skóre: 15
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Jednoznačně se připojuji k "použít lex+yacc/bison". Konkrétně nadhodím PLY: http://www.dabeaz.com/ply/ což je python implementace lex+yacc, nedávno jsem to použil. V odkazech se dá najít i implementace překladače pro jazyk C.

    Tohle je samozřejmě situace, kdy formální vzdělání hodně věcí zjednoduší. Vědět, co je, jak vypadá a jaké má omezení bezkontextová gramatika (a jak ji vytvořit)... Protože aspoň v nějaké intuitivní a zjednodušené formě to stejně budeš muset pochopit, abys mohl vysvětlit těm nástrojům, jak tvůj jazyk vypadá. ;-)
    "Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
    9.1.2016 09:40 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Ja ještě přihodím odkazy na manuál a učebnici, co jsem použil pro úspěšně "fungující" gramatiku :-D.

    Jinak se hodí znalost regexpů.
    MaSo avatar 9.1.2016 17:34 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Díky moc! Mrknu na to :-)
    S regexpy nějaký problém nemám (sice často musím použit strejčka... :-D )
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
    12.1.2016 15:31 Marek Sulik
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    No ak ti stačia regulárna gramatika, tak potom odporúčam RAGEL.

    http://www.colm.net/open-source/ragel/

    12.1.2016 18:37 Marek Sulik
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Ak chceš, tak mǒžem pomǒct s tým disassemblerom. Zadarmo.

    MaSo avatar 15.1.2016 17:12 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
    Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
    Děkuji :-)
    disassembler je relativně jednoduchý i v rámci BASHe, horší je to právě s assemblerem: gramatika, proměnně včetně doplňkových výpočtů, např.:
    napr: = (b'00110100'+0x17)/2
    offset equ (11+0x20)*2-napr
     movlr 'A'+offset,r3  (nebo: movr #'a'+h'1e',r4 - křížek se používal u Motoroly, ke které mám dost blízko)
    
    výpočty udělat skrze např. 'bc' (což už mi částečně funguje, až na doplňování proměnných), tady je boj.
    Pokud se mi nepodaří nějak obstojně ovládnout nějaký "tool", tak to nakonec udělám v BASHi, což potrvá :-) Anebo python, kde jsem našel jeden příklad - premiéra s Pythonem :-)
    Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.