DOSSEG .MODEL tiny ; lincare con opzione /t .CODE ORG 0100h Start: jmp Inizio tastiera equ 60h altoparlante equ 61h premuto equ 80h bit_speaker equ 02h leggi_int equ 3509h scrivi_int equ 25h dos equ 21h tsr equ 27h int_9 label dword old_int DW 2 dup (?) MioInt: push ax in al,60h ; tastiera ;60h test al,80h ; premuto ;80h jnz esci in al,61h ; altoparlante ;61h and al,0feh xor al,02h ;bit_speaker ;02h out 61h,al ; scrivi sul port dell'eltoparlante esci: pop ax ; mov old_int, 0025h ; salva l'indir. della routine di interrupt ; mov old_int+2,252ch ; originale in Old_int ;jmp cs:old_int ;salto extrasegmentale con prefisso jmp cs:int_9 Inizio: mov ax,3509h ; richiesta di funzione 3509h int 21h ; restituisce il contenuto del ; vettore di interrupt (interrupt 09) ; cioe' l'indir. della routine di intr. mov old_int, bx ; salva l'indir. della routine di interrupt mov old_int+2,es ; originale in Old_int mov ax,2509h ; funzione 25h per scrivere nel vettore ;mov al,09h ; degli interrupt in posizione 09h l'indir ; della nuova routine di interrupt lea dx,MioInt ; DS:DX puntano alla nuova routine intr. int 21h ; setta il vettore con l'indirizzo ; della nuova routine d'interrupt lea dx,Inizio int tsr ;27h Terminate-and-Stay-Resident (TSR) END Start