» Utilizator
LAMP
» Parteneri» De citit» Recomandari» Taskuri securitate » Statistici
  • 65486 de mesaje.
  • 7732 de topicuri.
  • 1231 de utilizatori.
  •  
  • Kopotosa e ultimul utilizator inregistrat.
[Detalii]

 

SkullBox Forum  |  Development  |  ASM  |  Topic: eniAsm

| |
Pagini: [1] 2
Print

eniAsm [2290 afisari]

3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

De ceva vreme,in timpul meu liber,lucrez la o aplicatie care as vrea sa o cred "incepator de desteapta" numita eniAsm.
eniAsm este un proiect open source care vrea sa fie odata si odata un assembler cat de cat veritabil.Am spus ca este "incepator de destept" referindu-ma pur la stadiul in care se afla,si nu la performantele lui.
Practic eniAsm este un assembler un pic mai special fata de celelalte assemblere.El este destinat[doreste sa fie] incepatorilor in domeniul "asm".

"Specialitatea" lui este dictata de restrictiile de limbaj:
- fiecare instructiune se termina in virgula,iar exceptia o fac etichetele[labelurile] care se termina in 2 puncte [:]
- pentru instructiunile de 2 parametri,cuvantul de legatura intre cei 2 parametri este "to"
- fiecare instructiune/eticheta vine scrisa pe rand propriu
- commenturile se pot face cu ajutoru asterixului *. exemplu: "*acesta este un comment"
- pot exista spatii intre 2 instructiuni din program pentru a mari lizibilitatea
- valorile numeice existente in instructiune sunt in baza 10,iar nu in baza 16 cum sunt in alte assemblere

In viitor se doreste o customizare a instructiunilor in functie de nevoile utilizatorului.Spre exemplu,instructiunea normala "mov",implementata in limbaj ca si "move" sa poata fi recunoscuta in sursa ca "muta" de exemplu,dar astea sunt planuri de viitor Smile

Proiectul il puteti descarca de aici. [E in engleaza pentru ca incerc sa public datele mele si pe siteul meu,pe masura ce se deruleaza programul,si vreau sa fie perceput de cat mai multi].Versiunea curenta este V0_7.

Proiectul e facut in C++,intentionat pentru Borland Developer Studio 2005,dar exista posibilitatea pentru integrare si in alte sisteme[prin sursele din directorul "crude sources"].In arhiva veti gasi atat sursele cat si cateva exemple de inceput de drum pentru assembler.

Sa luam un exemplu mai "special" , facut pentru skullbox:
Code:
*program intended for the skullbox community
*prints "hello eniasm!" several times
*assembled with eniasm v0_7
move 5 to cx,
move 0 to dh, *row
move 0 to dl, *column

ciclu:
*set cursor position
move 2 to ah,
move 0 to bh,
inter 16,

*print "hello eniasm!"
move 0 to bh,
move 14 to ah,

move 'h' to al, *prints 'h'
inter 16,
move 'e' to al, *prints 'e'
inter 16,
move 'l' to al, *prints 'l'
inter 16,
move 'l' to al, *prints 'l'
inter 16,
move 'o' to al, *prints 'o'
inter 16,
move ' ' to al, *prints ' '
inter 16,
move 'e' to al, *prints 'e'
inter 16,
move 'n' to al, *prints 'n'
inter 16,
move 'i' to al, *prints 'i'
inter 16,
move 'a' to al, *prints 'a'
inter 16,
move 's' to al, *prints 's'
inter 16,
move 'm' to al, *prints 'm'
inter 16,
move '!' to al, *prints '!'
inter 16,

incr dh,
incr dl,
loop ciclu,

move 0 to ah,
inter 22,     *waits for key from keyboard
rets,
Dupa ce asamblati cu eniAsm , cu optiunea isDebugging=1,veti vedea ceva asemanator:


Ceea ce vedeti voi este raportul assamblarii...codul fiecarei instructiuni precum si continutul fisierului asamblat.
Sa vedem ce face programul:


Nu e cine stie ce,dar merge! Tongue
In interiorul arhivei este un document word care specifica modul de asamblare precum si instructiunile suportate.

Cam atat pentru moment,viitorul nu stiu ce imi rezerva,fac proiectul asta din placere si sa mai inteleg cate ceva din instructiunile de asamblare.O versiune personalizata cu comenzi skullbox este posibila Winking
Un lucru e cert: proiectul va continua !

Sunt curios ce parere aveti despre initiativa si orice sugesti/hint/ajutor efectiv este apreciat Smile
Pana la urmatorul release,pe curand [pe tema releasurile cel putin Tongue] !
by 3Nigma 11Aprilie 2008
Logged

11-04-2008, 19:45 Twitt ::
zapakitul
*


Mesaje: 1930
OfflineOffline

WWW

O mica intrebare: O sa ie cross platform? Adica pot sa il folosesc si sub linux Love struck?
Logged

12-04-2008, 16:48 Twitt ::
redkar23
*


Mesaje: 164
OfflineOffline

WWW

suna bine Big grin e open-source ?  [edit]Ms,AdyX. nam citit inceputul postului[/edit]

Can we see some source code ? Big grin
[editat..iar] Jur k nici eu nam vazut linku spre sursa Laughing [/editat]
Cheers
Logged
12-04-2008, 16:53 Twitt ::
AdyX
*


Mesaje: 1257
OfflineOffline

WWW

Quote from: 3Nigma
eniAsm este un proiect open source care vrea sa fie odata si odata un assembler cat de cat veritabil.
Nu... Smile
Logged
12-04-2008, 17:00 Twitt ::
DranaXum
*


Mesaje: 64
OfflineOffline

WWW

Opinie: Practic tu interpretezi ce scrii in editbox, parsezi si folosesti comenzile ASM cu parametrii dati de tine. Mi s-ar fi parut mult mai interesanta dezvoltarea unui limbaj gen java, ce necesita runtime din cauza ca in spatele acelui interpretor ar fi fost mult mai multa bataie de cap.

In legatura cu move si muta ai putea instructiunile sa le tii intr-o baza de date. Din optiuni alegi sintaxa (si baza de date implicit). Cand pornesti parsarea te folosesti de acea baza de date. Acum depinde de tine, cum ai creat in prima faza codul: cat de flexibil e etc.

Oricum, keep up the good work!
Logged

Puterea izvoraste din capacitatea omului de a gandi!
http://dranaxum.wordpress.com
12-04-2008, 17:44 Twitt ::
3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

Cati ani ai DranaXum? Scuza-ma ca te iau asa,dar tu imi vorbesti de parca nu prea ai fi pus la curent cu ce face proiectul...
Quote from: "DranaXum"
Practic tu interpretezi ce scrii in editbox, parsezi si folosesti comenzile ASM cu parametrii dati de tine
Te asigur ca nu e asa de usor...eu nu interpretez nimic ca si comenzi ASM,totul este generat de mine in cod masina,e cel mai low level cu putinta...singurele dependente in program sunt legate implicit de proiect si nu de vreun assembler exterior.
Cat despre optiuni cu baze de date...la ce ar ajuta? atatea dependente pentru un assembler,il strici si se pierde si notiunea pe drum.
Nu inteleg unde vrei sa bati cu java,totusi...ca sa faci un limbaj mai inalt,tot la asm recurgi,in fond,nu?

zapakitule Smile ... nu,cel putin nu intentionez eu sa-l dezvolt pe linux. Arhiva,poate ai observat,contine "raw sources"...daca vrea cineva sa incerce sa-l porteze pe gcc e invitatul meu Smile ,poate o colaborare ceva hee hee
redkar23 sunt surse in arhiva...primitive,dar bune pentru a demonstra implementarile curente
Logged

12-04-2008, 22:14 Twitt ::
!_30
*


Mesaje: 1597
OfflineOffline


Am vazut si la tine pe site proiectul , dar mi-am cam prins urechile pe acolo  Tongue  Insa totusi m-ai facut curios . Deci sa presupunem ca avem comanda :  move 2 to ah . Muta in ah , constanta 2 . Tu iei , parsezi comanda [ afli ce trebuie sa se intample pe acolo ] si transformi "ideea" in cod masina ? ( la compilare ) Te rog sa ma corectezi daca vorbesc prostii . Sunt la inceput de drum cu ASM-ul  Big grin
   Practic numerele alea de la sfarsit , din Program file contains reprezinta instructiunile , adresele instructiunilor/variabilelor sau ? .. Curiozitatea bat-o vina Smile
Logged
12-04-2008, 22:34 Twitt ::
3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

!_30 ... bytesi aia din "program file contains" sunt practic byetsi asa cum se gasesc ei in programul asamblat.
si da,parsez "ideea" in echivalentul ei in cod masina,practic calculez opcodurile in functie de instructiune si parametri.

In functie de ce instructiune dai tu,asamblatorul face ce face orice alt assembler,interpreteaza instructiunile,calculeaza opcodurile[byetsi numerici ce reprezinta instructiunea] si in final pune totul impreuna pentru a scoate programul.

Nu'i problema,satisfac curiozitati...keep them coming  Tongue
Logged

12-04-2008, 22:53 Twitt ::
astan
*


Mesaje: 773
OfflineOffline


M-am uitat putin peste surse si am cateva intrebari/sugestii:

1. In fisierul eAsm_debug.h, sunt niste definitii de functii non inlined. E vreun motiv pentru care nu sunt puse intr-un fisier cpp si sunt puse intr-un header ?
2. La fel, fisierul eAsm_x86Instruction.h contine nu numai declaratia clasei x86Instruction ci si implementarea ei. De obicei, functiile membre non-inlined se pun in fisiere cpp.
3. De obicei, fisierele header ar fi bine sa fie guardate prin if def-uri
#ifndef my_header_h
#define my_header_h
..... continutul header-ului
#endif
4. In functia instr_type x86Instruction::getInstrType(char *com) exista secvente de cod de genul:
if(strstr(com,"add ")==com) toRet=e_add;
if(strstr(com,"clearcf")==com) toRet=e_clearcf;
if(strstr(com,"cleardf")==com) toRet=e_cleardf;
if(strstr(com,"clearif")==com) toRet=e_clearif;
....

Nu cumva ar trebui :
if(strstr(com,"add ")==com) toRet=e_add;
else if(strstr(com,"clearcf")==com) toRet=e_clearcf;
else if(strstr(com,"cleardf")==com) toRet=e_cleardf;
else if(strstr(com,"clearif")==com) toRet=e_clearif;
....

ca sa eviti comparatiile inutile dupa ce ai identificat deja comanda. Totusi, m-am uitat pe cod doar 10 minute, s-ar putea sa fi inteles gresit. Aceeasi intrebare si in legatura cu instr_operands x86Instruction::getRegister(char *reg)

4. Din clasa eAsm_compiledProgram, se pare ca asamblorul nu poate sa gestioneze programe avand mai mult de 50 de etichete ... De ce aceasta limitare in loc sa se foloseasca o structura dinamica, de exemplu o lista ? Daca utilizatorul are un program avand mai mult de 50 de etichete, ce se intampla ? Se intoarce o eroare ?

Presupun ca vrei sa adaugi to setul de instructiuni. In cazul acesta, algoritmul de de comparatie succesiva de siruri s-ar putea sa devina prea lent. Recomand sa modifici codul si sa implementezi metode de cautare mai rapide, eventual folosind o tabela de dispersie. Nu stiu daca e cazul, daca cautarea va deveni prea lenta dupa ce vei adauga toate instructiunile, dar e o metoda care merita luata in considerare.
Logged
13-04-2008, 00:47 Twitt ::
3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

ma bucur pentru feedbackul tau.
standardele distributiei de proceduri inline nu imi sunt cunoscute. Ce standarde sunt acestea? ca sunt curios...asta referitor la afirmatiile 1 si 2.
afirmatia 3...sugestie notata,nu am implementat directive de procesor desi sunt perfect constient de ele.
afirmatia 4...are o explicatie perfect logica Smile : nu vor ramana in formatul asta verificarile. Am spus ca voi face ca instructiunile sa fie customizate in sens ca utilizatorul va putea sa-si defineasca propria varianta pentru instruciunea move actuala din easm sa zicem,la fel si cu registry...nu se lucreaza prea mult la functiile respective deoarece vor fi depasite de indata Smile
Dimensiunea vectorului de etichete este pur formala...proiectul este actualmente mai mult in faza de debug decat in faza de run. Un sistem mai bun de gestionare a instructiunilor prin liste dinamice este "programat" sa apara in versiunile ulterioare...

fii sigur ca am o lista de sarcini/optimizari pe care le parcurg si incerc sa le realizez...
mersi inca odata ca te-ai interesat in surse si ca ai si postat pareri bune.
daca mai ai sugestii/pareri...fa-mi-le publice  Winking
Logged

13-04-2008, 08:13 Twitt ::
DranaXum
*


Mesaje: 64
OfflineOffline

WWW

Ma scuzi enigma, nu ma uitasem dinainte pe sursa (nu vazusem linkul), asa ca imi retrag cuvintele deoarece ce am zis eu in postul trecut chiar nu se potrivea cu ce ai facut tu.
Logged

Puterea izvoraste din capacitatea omului de a gandi!
http://dranaxum.wordpress.com
13-04-2008, 13:01 Twitt ::
astan
*


Mesaje: 773
OfflineOffline


Am deschis un nou topic privind impartirea codului intre fisiere header si de implementare in rubrica C/C++, sugestiile sunt utile intr-un cadru mai larg.
Logged
13-04-2008, 16:04 Twitt ::
!_30
*


Mesaje: 1597
OfflineOffline


Inca o curiozitate 3Nigma . Ce materiale ai folosit pentru a invata "asamblare" si in prealabil sa reusesti sa faci eniAsm . Nu ma refer la partea de programare , ci doar la "cunostintele" legate de asamblare . Asa instructiuni si alte cateva chestii mai neinteresante se gasesc , dar low-levelul e mai complicat . Ai putea sa-mi dai exemplu de cateva materiale de studiu ?
   Am vazut ca tu la fiecare comanda [ in screenshotul de mai sus ] calulezi / afli niste numere . De exemplu move 5 to cx si rezulta 185 5 0 . Ce inteleg eu este ca fiecare comanda are un opcode [ nu prea inteleg eu ce si cum e cu opcode-ul ] , un numar si apoi operatorii alte numere . Stiu ca aberez , dar daca ai putea sa-mi dai niste explicatii sa nu mor curios pana reusesc sa mai inteleg si eu ce si cum e cu assemblerul asta . Am vazut eu ca fiecare "comanda" data procesorului ar fi o secventa " opcode / date / etc .. " multe chestii dar nu m-am prins ce si cum .  :rolleyes:
Logged
14-04-2008, 20:07 Twitt ::
3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

!_30 scuze pentru raspunsul intarziat.
Vei gasi tot ce ai nevoie aici : http://www.intel.com/design/Pentium4/documentation.htm
Ca sa faci un assembler trebuie sa sti cum functioneaza un procesor, apoi sa stii instructiunile specifice fiecarui procesor si in cele din urma sa faci parserul. Nu e mare filozofie,doar ca e mult Straight face
Daca mai ai nedumeriri,spune Smile.
Logged

15-04-2008, 16:19 Twitt ::
3Nigma
*


Mesaje: 1617
OfflineOffline

WWW

ceva vreme mai tarziu... v0.8 a fost creat!.
cateva precizari:
-versiunea vine cu un ide rudimentar ca userul sa nu mai fie nevoit sa lucreze cu periferice gen Notepad
-implementat sistemul de fisiere ".easmcl" care permit programatorului sa isi defineasca setul de instructiuni proprii
-adaugat un numar de 43 de instructiuni noi din care iasa exemple mai frumoase dupa cum vom vedea Smile
-conceptul de "jump" merge atat in avans cat si inapoi in program pe offseturi de 8 biti momentan
-curatat si "bibilit" codul

Mai multe detalii despre versiune le puteti gasi aici [in engleza].

Un screen pentru a demonstra de ce e in stare[gasiti codul pe pagina de mai sus]:


by 3Nigma 14Aprilie 2008  :cool:
Logged

14-05-2008, 16:47 Twitt ::
Pagini: [1] 2
Print
SkullBox Forum  |  Development  |  ASM  |  Topic: eniAsm