PDA

View Full Version : assembler in line in microsoft visual studio


Filippo_Martini
14-07-2004, 02:16
Sto scrivendo un pezzo di codice in assembler all interno di un codice c utilizzando microsoft visual studio 6.0. Con la funzione __asm{...} il compilatore "vede" tranquillamente l'assembler e compila(assembla) senza errori, il problema è che utilizzando l'istruzione assembler in eax,#porta non ho errori di compilazione, ma l'eseguibile non parte. Togliendo questa istruzione per leggere da una porta in ingresso non ho problemi.
Esiste un qualche #di porta leggibile che non mi faccia bloccare l'eseguibile?
Grazie mille

repne scasb
14-07-2004, 08:31

cionci
14-07-2004, 08:55
Ci sono anche device driver che una volta aperti con CreateFile permettono di accedere alle istruzioni di in e out...non chiedetemi come funziona...

Il driver in questione è giveio.sys... Fai una ricerca, si trova bene, ma a parte un file di esempio che accede allo speaker, la documentazione è praticamente inesistente...

cionci
14-07-2004, 09:14
Copia giveio.sys in system32 ed utilizza il file loaddriver.exe per caricarlo nel sistema: http://vcool.occludo.net/VCool_17man.zip

Il link per scaricarlo, con file di esempio in C incluso: ftp://ftp.nsk.su/.3/magazins/ddj/1996/1996.05/directio.zip

repne scasb
14-07-2004, 09:20

ilsensine
14-07-2004, 09:45
Originariamente inviato da repne scasb
Le istruzioni "in" e "out" sono da intendersi "privilegiate" da Ring 3. Questo vuol dire che non e' disponibile l'esecuzione di tali istruzioni assembly in Win9x/NT da programma utente.
Mi sembra che Win9x le consenta, come consenta altre atrocità (tipo cli/sti)

cionci
14-07-2004, 09:49
Sì...Win9x lo consente...
Solo i sistemmi operativi un po' più seri di MS non lo consentono...

ilsensine
14-07-2004, 09:52
Originariamente inviato da cionci
Solo i sistemmi operativi un po' più seri di MS non lo consentono...
Togli "un pò più seri" e sono d'accordo :D

Filippo_Martini
15-07-2004, 09:08
Grazie alle vostre indicazioni ho scaricato il driver e il loader, seguendo le istruzioni ho attivato il servizio (lo si può infatti vedere da risorse hardware nei driver non plug and play, dove giveio compare e risulta attivo), ho identificato un indirizzo di porta parallela(da 0x378 a 0x37f) e ho lanciato il mio codice in assembler all'interno di visual studio. Purtroppo però l'istruzione
in eax,dx (con all'interno del reg. dx il valore precaricato dell'indirizzo di porta ad es. 0x378) non la digerisce!!!
Ho visto che in molte delle istruzioni per l'attivazione del driver facevano riferimento a win 2000 ed NT, io ho su Win xp home ed., potrebbe essere questo il problema?.... se ci fosse un altra soluzione a questo prob. vi prego, aiutatemi!!
Grazie mille