PDA

View Full Version : Win XP & assembler


Samuele70
27-09-2004, 15:46
Ciao a tutti

Ciao

Questo è il mio primo post su questo forum.

Circa tre mesi fa creai un programmino (con il Borland C++ Builder 3)
per inviare dei file di testo tramite la porta seriale del pc.
Il prog (dopo un certo periodo di sviluppo) funzionava correttamente,
poi a seguito all'aquisto di un nuovo pc, sono passato da win98se a winXP pro.
E qui mi sono accorto che il mio prog non andava più, o meglio una parte
di esso e cioè quella che restava in "ascolto" dello stato della porta seriale
appunto.
La funzione che avevo creato, tramite una routine in assembly, leggeva
direttamente i bit in memoria.
Eccone una versione semplificata :


WORD Ind = 0x03FE; // CommStatusAddress comm1
BYTE stato;

do {
// Interrogazione InputStatusRegister
asm {
mov dx, Ind
In ax, dx
Mov stato, al
}
// Pronto Per La ricezione ???
} while( ! (stato & 0x10) && ! Stop_Trasmissione);



Altro non fa che leggere il bit n4 cioè lo stato del "clear to send" (CTS)
di COM1.

Dunque, mentre questa routine funzionava correttamente in Win98se :)
la stessa non piace affatto a WinXP pro :mad: (e ti pareva ...)

Qualcuno può, per favore, aiutarmi a renderla digeribile a win XP ?

Grazie per l'attenzione. :)

VICIUS
27-09-2004, 17:40
da windows 2000 non è piu possibile eseguire istruzioni di i/o dirette tramite istruzioni assembly in un programma. sarebbe troppo facile distruggere il sistema per un virus. quindi devi riscrivere quella parte che rimane in ascolto passando per il sistema operativo.

ciao ;)

Samuele70
28-09-2004, 09:30
Si temevo una cosa del genere...

Sai quale api devo usare ?

Con "GetCommState( )" non ci sono riuscito... :muro:

Mi servirebbe qualche dritta in BCBuilder o anche in visual C.

Grazie VICIUS.