Assembler írása - Hogyan?

Assembler írása - Hogyan?
2011-11-18T19:11:56+01:00
2011-11-19T17:37:20+01:00
2022-10-25T19:05:39+02:00
  • Mutasd a teljes hozzászólást!
  • Esetleg nézz utána a lexikális analízis kifejezésnek is!
    Sajnos egy valódi fordító program elkészítése nem olyan egyszerű, mint ahogy elsőre látszik.
    Persze feltéve, hogy akarsz változó neveket/szimbólumokat, netán makrókat is használni. Kérdés, hogy milyen platformra óhajtod megírni. Ha jól emlékszem, egy windows-os .exe előállításához nem a végrehajtható kódot kellett legyártani, hanem egy .obj fájlt, amiből egy linker készített futtatható .exe-t. Ez sem biztos, hogy teljesen triviális. És sorolhatnám.
    Mutasd a teljes hozzászólást!
  • nem tudom, azt hittem azért vagy ilyen határozott mert tudod hogy nem tudja. itt lévő leírásból (középtájt) nem tudtam meg hogy pontosan ezt tudja-e.
    apropó, mi lett a programista.hu-val?
    Mutasd a teljes hozzászólást!
  • tudja?
    Mutasd a teljes hozzászólást!
  • szóval ezt már a fasm például nem tudja
    Mutasd a teljes hozzászólást!

  • .if open_device("12345678") == FT_OK .if read_file("d:\x.txt") == TRUE .while infinite get_byte assume esi: PTR myDATA .break .if [esi].alma.szilva!= lekvar .endw .repeat .until eax!=0 .endif .endif kidump macro stru,item,tipus,extra invoke StdOut, addr log_device_&item& movzx eax,[esi].&stru&.&item& IFNB <extra> .if byte ptr [extra]!=0 .endif ENDIF endm mov eax,GetFileSize("alma.txt")

    ez most csak hirtelen...

    Mutasd a teljes hozzászólást!
  • ki tudnád emelni hogy a többi miért rosszabb, és hogy a masm miben több amit a többiek egy sem tud?
    Mutasd a teljes hozzászólást!
  • Csak megjegyzem, hogy a gépi kódot visszafordítani Assembly-re egyszerűbb feladat, ha esetleg meggondolnád magad.

    Egyébként egyszerű a feladat.
    Főleg hogy olyan Assembly nyelvet találsz ki amilyet akarsz, csak a gépi kód az ami kötött.
    Nem kell mindent rögtön megvalósítani.
    Ha ismersz 10 egyszerű (egy byte-os) utasítást, az is valami, utána már csak bővíteni kell.

    Én így csinálnám:

    1-beolvasnék egy sort
    2-megnézem, hogy melyik utasítás ez (MOV, ADD stb.).
    3-Ha 1 byte-os akkor fogom a hozzá tartozó számot és írom a bináris fájlba (memóriaterületre).
    4-Ha bonyolultabb akkor külön eljárásban nézném meg, hogy milyen paraméterek (számok, regiszterek) követik és ezek alapján raknám össze a kódot.
    5-ha vége a sornak akkor ugrás az 1-es pontra.

    Menet közben jönnek a hibalehetőségek, amiket ki kell szűrni. Esetleg még az ugrások/cimkék, matematikai kifejezések, változók kezelése okozhat kisebb gondot.

    Érdemes fogni egy "hello world"-öt és csak azokat az utasításokat megvalósítani amiket az használ, majd addig írni a programot amíg nem tudsz belőle fordítani egy .COM fájlt ami tökéletesen fut. Azután lehet EXE fájlt készíteni, meg bővíteni az utasításkészletet és bonyolultabb programokat fordítani. (De kicsi rá az esély, hogy valaki teljes értékű fordítót tudjon készíteni, szerintem hamarabb megunja.)
    Mutasd a teljes hozzászólást!
  • b4romság!

    Nem attól, lesz jó egy assembler, hogy tudsz-e táblázatból implementálni címzés módokat.

    Nagyon sok assembler van, de csak 2 jó (használható)

    Microsoft Macro Assembler
    Japeth jwasm


    japeth fordítója opensource



    Mutasd a teljes hozzászólást!
  • b4romság.
    /majd a következőnek kifejtem....
    Mutasd a teljes hozzászólást!
  • Igazság szerint csak kíváncsiságból egy nagyon alap kis assemblert szeretnék létrehozni


    Ezekkel talán el lehet indulni:
    Assembly.pdf

    Doksi

    Illetve az alapokat szerintem egészen jól tartalmazzák az alábbi könyvek:

    László József: A PC hardver programozása valós és védett módban

    Peter Norton - John Socha: Az IBM PC assembly nyelvű programozása
    Mutasd a teljes hozzászólást!
  • keresd meg itt a prog.hu-n a sándor nevű progimat. pascalban irtam, és bizonyos szempontból egy magas szintű asm-nak is felfogható :)
    Mutasd a teljes hozzászólást!
  • Igazság szerint csak kíváncsiságból egy nagyon alap kis assemblert szeretnék létrehozni. Csak úgy, afféle "ezzel is tanulok" felfogással. :)
    Mutasd a teljes hozzászólást!
  • Nem hiszem, hogy jobb assemblert tudnál írni, mint amilyenek vannak. Ahhoz nagyon sok különböző féle utasítást kell értelmezni.
    Inkább csak kíváncsi vagy az utasítások kódolására.
    Például vannak egyszerű egybájtosak:
    inc ax 40h push es 06h
    aztán kétbájtosak:
    mov cl,dl 8A CA vagy 88 D1
    Itt a 88 jelenti a
    mov r/m8,reg
    típust, a CA meg 3 részre oszlik:
    1100 1010 CA md r/m reg 11 001 010
    Az md-ben a 11 jelenti, hogy az első operanus is egy regiszter (ellenben egy memóriacím, és akkor a többi bit a címzés típusát adja meg, pl milyen regiszterek vannak benne, meg hogy van- konstans eltolás). Ez esetben a 2*3bit a két regiszter kódját adja meg.
    Aztán olyan egyoperandusúak, amelyeknél a 2. bájt középső 3 bitje nem regisztert ad meg, hanem hozzátartozik az 1. bájtban levő gépi kódhoz:
    not byte ptr[ebx] F6 13
    Fontos, hogy az assembler segítsen a címkék kiszámításában is. Szóval fordítás közben működtetni kell egy számlálót, melyhez minden utasításnál hozzá kell adni a hosszát. Ha valamelyik utasítás előtt címkét találunk, listába kell venni, és hozzárendelni a számláló aktuális értékét, címkehivatkozásnál meg kikeresni, hogy mekkora az értéke.
    Szinte minden fordító értelmez ilyet is:
    mov eax,456*(564+545)
    Szóval konstans kifejezésére aritmetikai meg logikai műveleteket.
    Na és még a makrósítás, nem semmi.
    Ezt mind meg akarnád csinálni?
    Mutasd a teljes hozzászólást!
  • Mondjuk nem árt ha ismered az x86 gépi kódját, azaz hogy milyen utasítás milyen címzésmóddal milyen kódnak felel meg. Aztán, az adott programnyelvet sem árt ismerni amiben írni akarod. Pl. a C nyelv kiváló erre. Ezen kívül még programozni kell hozzá tudni. Más úgy hirtelen nem jut eszembe... Amúgy ma már bőven akad assembler fordító, nyílt forrású is, Pl. nasm.
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Egy ideje szemezgetek az Assembly nyelvvel, meg magukkal az Assemblerekkel is és felvetődött bennem az ötlet, hogy mi lenne, ha írnék egyet én is... Mondjuk az x86 architektúrájú i8086-os processzor utasításait fordítaná át gépi kódra.

    A kérdésem a következő: mit kell ahhoz megtanulnom, hogy egy ilyet össze tudjak rakni? Akinek van valamiféle olvasnivalója a témával kapcsolatban, azt kérem, ne tartsa meg magának!

    A válasz(oka)t és a segítséget előre is köszönöm!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd