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

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:
*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!

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

Un lucru e cert:
proiectul va continua !Sunt curios ce parere aveti despre initiativa si orice sugesti/hint/ajutor efectiv este apreciat

Pana la urmatorul release,pe curand [pe tema releasurile cel putin

] !
by
3Nigma 11Aprilie 2008