.[ ČeskéHry.cz ].
Strategy In Strategy
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 17. leden 2009, 20:01:20    Předmět: Odpovědět s citátem

tak to je skoro to sami jako udelat

kód:

class OpCode
{
  public string Name;
  public Action<Assembler> AssembleMethod;
  public void Assemble(Assembler assembler)
  {
     this.AssembleMethod.Invoke(assembler);
  }
}

a tohle nacpat do nejake staticke tridy
static class OpCodes
{
  public static readonly OpCode Nop = new OpCode { Name = "Nop", AssembleMethod = (asm) => asm.AssembleNop() };
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 17. leden 2009, 20:07:17    Předmět: Odpovědět s citátem

Takže máš hafo instrukcí a dva možný výstupy? A co teda udělat abstraktní třídu Assembler s abstraktníma metodama pro výpis každé instrukce a potom dvě implementace této třídy MASM, NASM? Nepopírám, že mi něco uniklo Smile
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 17. leden 2009, 20:09:48    Předmět: Odpovědět s citátem

Quiark napsal:
Takže máš hafo instrukcí a dva možný výstupy? A co teda udělat abstraktní třídu Assembler s abstraktníma metodama pro výpis každé instrukce a potom dvě implementace této třídy MASM, NASM? Nepopírám, že mi něco uniklo Smile

no ano to je to co sem tu nahore psal, nemuzu ovsem udelat tridu
kód:
Assembler
  void Assemble(Nop opCode)
  void Assemble(Call opCode)
  void Assemble(Stloc opCode)


ale musim
kód:
Assembler
  void AssembleNop(Nop opCode)
  void AssembleCall(Call opCode)
  void AssembleStloc(Stloc opCode)


a tudiz nekde rozlisit to volani (z toho duvodu kterej sem psal nekde nazacatku ze Assemble((OpCode)opCode) se rozhoduje podle typu za compiletime a ne za runtime)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ondras



Založen: 12. 09. 2007
Příspěvky: 66

PříspěvekZaslal: 17. leden 2009, 20:27:04    Předmět: Odpovědět s citátem

Zahodime reseni problemu cos navrhl, zkusime vyresit problem tvuj, jo Smile

Ja nejak nechapu napriklad proc Nop, Call a StdAlloc jsou tridy. Oni poskytuji nejakou funkcnost? Proc dedi OpCode? Musi to tak byt? Netusim co je to OpCode, ale jestli to chapu tak chces jen prelozit abecedu (opcodu) do jiny abecedy (asm)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
posila



Založen: 29. 07. 2007
Příspěvky: 201

PříspěvekZaslal: 17. leden 2009, 20:29:26    Předmět: Odpovědět s citátem

Hmm, hmm, asi bych vyuzil toho, ze to pises v C#. Pokud vis, ze se bude prevadet jen do MASM nebo NASM, tak bych si vytvoril atribut reprezentujici prepis do MASM a druhy pro prepis do NASM a pred kazdym OpCodem napsal, jak se dany OpCode ma prepsat prave pomoci tech atributu. V tridach, ktere se o prepis do assembleru staraji, bys jen pouzil reflexi. Vyhodu by to melo taky tu, ze kdybys chtel pridat dalsi instrukci, nemusis do techto trid vubec zasahovat.

dostal byses klasicky k:
kód:
OpCode {
    public void Assemble(Assembler assembler)
    {
        assembler.Assemble(this);
    }
}

[MASM("nop"), NASM("nop")]
class NopCode: OpCode { }


Dalsi otazka je, jestli vubec ma smysl psat vlastni tridy pro reprezentaci OpCodu (ty uz nekde v .NETu jsou), a nepouzit radeji ty .NETi s tim ze by se cele assemblovani delalo pomoci tech ifu (kterym ses chtel vyhnout). - Ve skutecnosti by to slo i treba i bez ifu (tim, ze by sis naplnil treba Dictionary<string, string> dvojcemi "jmeno.typu", "prepis"). Pouziti Mostu nebo Visitora mi prijde docela jako reseni pres ruku.

EDIT: Ono je pres ruku docela i pouziti tech atributu... proc by to nemohlo byt takto?)

kód:
class OpCode {
    public void Assemble(Assembler assembler)
    {
        assembler.Assemble(this);
    }

    public virtual string GetMASM();
    public virtual string GetNASM();
}

class NopCode: OpCode {
    public override string GetMASM() { return "nop"; }
    ...
}


Naposledy upravil posila dne 17. leden 2009, 20:52:05, celkově upraveno 3 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ondras



Založen: 12. 09. 2007
Příspěvky: 66

PříspěvekZaslal: 17. leden 2009, 20:36:32    Předmět: Odpovědět s citátem

Posila: ja souhlasim s tim slovnikem. Tohle je rozumny reseni. Jak ja to chapu tak nop, call, stdalloc nejsou tridy. Kdyby to tak bylo tak by je navic vsechny musela znat i trida nasm nebo tasm. Co kdyz pak nejakou pridas? Tak ses v riti a musis to cely prepsat a prelezit. Nedej boze aby to chtel takhle pouzit nekdo treti. Diky tomu slovniku se tomu vyhnes, jen ho naplnis treba z textovyho souboru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 17. leden 2009, 20:46:26    Předmět: Odpovědět s citátem

no ja mam Nop:OpCode jako tridu kvuli tomu ze v soucasnosti v tom mam tu metodu Assemble() a prepisuju to jen do MASM

ano kdyz se to bude prepisovat primo v te trida Assembler, uz to jako jednotlivy tridy byt nemusi


2posila: ten prepis je nekdy moc slozitej na to aby sel definovat takhle staticky

mas pravdu v Reflection.Emit uz opkody definovany sou, ale jak sem psal potreboval sem tam pridat tu metodu Assemble(), kera ted uz asi nebude potreba...


sice to nejsou tridy, ale ta trida Assembler je skutecne musi vsechny znat, jinak logicky nejdou prelozit a ten vyslednej program nemuze fungovat Smile


k tomu editu, neco podobnyho me uz taky napadlo udelat nejakej interface
IMASMAble Smile s metodou Assemble(MASM assembler) a pak na kazdym opkodu zvlast implementovat jako assembler.Write("nop") trebas
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ondras



Založen: 12. 09. 2007
Příspěvky: 66

PříspěvekZaslal: 17. leden 2009, 20:52:12    Předmět: Odpovědět s citátem

Nemel bys tam cpat to Assemble ani kdyby jsi to prepisoval jen do toho jednoho. Presne z toho duvodu jak jsi popsal, ze se to zmeni. Nad tim by mela pracovat jina trida, ktera se o tohle stara specializovana presne na to kam se to prepisuje. Ta to vi a umi to. To jsou presne ty tve nasm a masm.

Jeste trochu jinej pohled. "class OpCode extends Assembler". A ty jen mezi temi tremi "assemblery" prevadis.

No nic valim na pivo. Cus
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 17. leden 2009, 20:57:13    Předmět: Odpovědět s citátem

Ondras napsal:
Nemel bys tam cpat to Assemble ani kdyby jsi to prepisoval jen do toho jednoho. Presne z toho duvodu jak jsi popsal, ze se to zmeni. Nad tim by mela pracovat jina trida, ktera se o tohle stara specializovana presne na to kam se to prepisuje. Ta to vi a umi to. To jsou presne ty tve nasm a masm.

Jeste trochu jinej pohled. "class OpCode extends Assembler". A ty jen mezi temi tremi "assemblery" prevadis.

No nic valim na pivo. Cus


ano vim ze OpCode, by nemel delat nic s assemblerem (stejne jako Model by se nemel sam vykreslovat) proto se tu ptam jak se to resi Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna