PDA

View Full Version : [ASSEMBLER]rilevare rilascio e pressione dei tasti


frizzo28
11-08-2007, 19:11
ciao a tutti dovrei realizzare un programma in assembler che esegua una procedura alla pressione di un tasto e un altra quando lo si rilascia...
non so da dove iniziare... Qualche idea?
grazie:) ciao

Netskate
12-08-2007, 22:20
è passato abbastanza tempo dall'esame di architettura degli elaboratori ma da quel che mi ricordo qualcosa del genere dovrebbe andare bene:


;Si mette in attesa di un tasto se il tasto premuto è esc salta a fine programma
wait4Key: call insChar
cmp al,1bh
je fine_programma
jmp wait4key

;*****************************************
;* PROCEDURA "insChar"
;* Questa procedura legge un carattere da
;* tastiera e lo memorizza nel registro AL
;*****************************************
insChar proc near
mov ah,07h
int 21h
ret
insChar endp
;*****************************************
;* FINE PROCEDURA "insChar"
;*****************************************


devi usare gli interrupt, se non ricordo male mettendo in ax 07 e chiamando l'interrupt 21 il sistema si mette in attesa della pressione di un tasto da tastiera, in questo caso mette il codice ascii in AL e lo puoi confrontare con quello che ti serve per fare partire una determinata procedura.

opzioni dell'interrupt 21 specifiche proprio per la pressione o per il rilascio non le ricordo, magari esistono. Comunque questo ti può essere d'aiuto come punto di partenza

71104
12-08-2007, 23:40
non credo sia bene affidarsi alla int 21h quando si lavora in Windows, se ben ricordo i kernel NT non sono stati progettati con la pretesa di retrocompatibilità con MS-DOS come uno degli scopi primari, percui alcune funzionalità della int 21h potrebbero non esistere più, anche se magari una cosa molto basilare come il controllo della tastiera c'è ancora. la int 21h era un'API specifica di MS-DOS.

Netskate
13-08-2007, 00:27
per un programma basilare come sembra aver chiesto lui dovrebbe andare bene :)

frizzo28
13-08-2007, 10:50
non credo sia bene affidarsi alla int 21h quando si lavora in Windows, se ben ricordo i kernel NT non sono stati progettati con la pretesa di retrocompatibilità con MS-DOS come uno degli scopi primari, percui alcune funzionalità della int 21h potrebbero non esistere più, anche se magari una cosa molto basilare come il controllo della tastiera c'è ancora. la int 21h era un'API specifica di MS-DOS.
Innanzitutto grazie a tutti x le risposte :)

x 71104 Si infatti non ho specificato che sto programmando su un 386 con MS-Dos installato :) (Da oggi un 486 perche' il 386 stamattina sono andato ad accenderlo e non funziona +...:cry: )

x Netskate Quello che mi hai proposto tu si mette in attesa della pressione di un tasto e mette l'ascii in al vero? Come la ah=01h int 21h?


cmq il programma che ho intenzione di realizzare e' questo:
"Scrivere un programma che modifichi la routine di interruzione relativa alla gestione della tastiera in modo che ogni volta che viene premuto un tasto venga emesso un suono che duri finche' il tasto non viene rilasciato..."


Quindi mi servirebbe se e' stato premuto un tasto 'attivo il suono' poi appena viene rilasciato lo 'disattivo' cosa che faccio con due procedure... attiva_suono e disattiva_suono...

frizzo28
16-08-2007, 12:27
up un aiutino? :muro: