Newsgroup: it.comp.lang.visual-basic
Titolo: [FORSE OT] Visual Basic e Assembler

Ciao!
Sto creando un compilatore in VB che traduce il codice scritto nel suo
linguaggio (simile al VB) direttamente in codice assembler che poi vienen
compilato automaticamente con il comp. TASM e il linker TLINK.
Devo implementare funzioni come MID, INSTR... ma non so come fare: non sono
esperto in asm!!!
Qualcuno puo' aiutarmi???

esperto in asm!!!
Ehm, l' assembly non e' proprio il pane quotidiano del vbista :-(
Posso darti una mano cercando di avvicinarmi il piu' possibile
suggerendo il sorgente C di strstr , che restituisce il
puntatore alla prima occorrenza di una stringa in un' altra
(una specie di Instr, quindi).
Da li' a passare all' assembly ci pensera' qualcun altro :-P
char * __cdecl strstr (
        const char * str1,
        const char * str2
        )
{
        char *cp = (char *) str1;
        char *s1, *s2;
        if ( !*str2 )
            return((char *)str1);
        while (*cp)
        {
                s1 = cp;
                s2 = (char *) str2;
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
                if (!*s2)
                        return(cp);
                cp++;
        }
        return(NULL);
}
-- 
hth, hal

 Qualcuno puo' aiutarmi???
Sono un po' arrugginito essendomi fermato al 386 (sfruttato peraltro poco),
quindi non posso certo scriverti la routine completa, però qualche dritta te
la dò volentieri.
Per la INSTR devi lavorare un carattere per volta. Metti il carattere in AL
(o AX) carica l'indirizzo della stringa in cui cercare LEA e poi usa
l'istruzione SCAS 
http://www.clipx.net/ng/masm/ng24dbd.php
Occhio che se la stringa è memorizzata con codifica Unicode, ogni carattere
sono 2 byte, altrimenti uno. VB di default dovrebbe usare Unicode.
Probabilmente esiste anche una istruzione SCASD che lavora 4 byte per volta,
ma sinceramente non mi ricordo.
Con SCAS trovi solo il primo carattere, poi devi controllare se da lì in poi
le due stringhe sono uguale. Per quello puoi usare l'istruzione CMPS
http://www.clipx.net/ng/masm/ng7990.php
.
Per MID invece trovare la posizione giusta è semplice, con LEA
si,bufferstring + offset. A questo punto però devi allocare una area di
memoria nuova (chiamando l'API GlobalAlloc, ma poi devi gestirti una tabella
di indirizzamento delle aree allocate, e ricordarti di deallocarle alla
fine), e copiarci la parte utile della stringa sorgente con REP MOVS:
http://www.clipx.net/ng/masm/ng19bdd.php
Se hai capito tutto, linkati un NG che parli di assembler (prova con
comp.lang.asm.x86 o alt.lang.asm) e vai pure avanti col progetto. In caso
contrario lascia perdere.
Ciao
*Roby*

> char * __cdecl strstr (
brutto sto cdecl che ne dici di un stdcall ?
ciao :)

 Qualcuno puo' aiutarmi???
055 34xx52 chiama dopo le 10.00 e fino alle 19.00 costa poco e ti diverti un
monte!
da retta....passa oltre!..se sai programmare e mastichi un minimo di
inglese...ci son tanti progetti freeware al mondo che cercano gente per
essere completati!

 vb6 quando compila secondo te che fa????
Lo so, ma non so ad esempio come visualizzare il codice asm prodotto da vb!
Fino a prova contraria, l'exe prodotto da compilatori asm è il piu' veloce
in assoluto; e a me serve tutta la velocità
possibile per gestire le informazioni che dovrà elaborare il mio programma
di A.I (Artificial Intelligence), Sam.
http://utenti.lycos.it/aifactory2/Home.html
Non mi interressa la grafica, quella la faccio in VB!
Sto creando questo compilatore perchè programmare in assembler, secondo me
non è il massimo della comodità... ;-)
P.s: lo so, sono un po' masochista a portare avanti sto compilatore ma,
stupidamente, trovo una grande soddisfazione personale a fare "tutto" io!!!

 brutto sto cdecl che ne dici di un stdcall ?
Perche' mai?
In ogni caso quello era il sorgente "ufficiale" della strstr.
--
ciao, hal
--------------------------------
Inviato via 
http://usenet.libero.it

 In ogni caso quello era il sorgente "ufficiale" della strstr.
ma infatti era solo un piccolo consiglio :))
ciao