DOSSEG .MODEL tiny .CODE org 0100h Start: JMP Inizio ; ............. area dati ............. TSR EQU 31h ; funzione TSR del DOS DOS EQU 21h ; codice interrupt DOS SETVECT EQU 25h ; funzione SetVect del DOS SegVideo EQU 0B800h ; indirizzo inizio memoria video (a colori) POSIZ EQU 159 ; posizione carattere sullo schermo Cifra DB '0' ; carattere ASCII della cifra Tempo DB 18 ; tipo di interrupt da aspettare per ... ; ... sapere se e' passato un secondo MioInt: PUSH AX ; salvataggio del contesto specifico PUSH ES PUSH DS routine: PUSH CS ; copio il valore del registro CS ... POP DS ; ... in DS, per accedere ai dati DEC tempo ; controllo se è passato un secondo JNZ mostra ; se no, vado a visualizzare la cifra MOV tempo,18 ; se si ripristina il valore e ... mostra: MOV AX,SegVideo ;aggiusta il valore del segmento ES MOV ES,AX mov bl,Cifra MOV ES:Posiz,bl ; scrivi la cifra sul video avanza: INC Cifra ; valuta la prossima cifra CMP Cifra,'9'+1 JNZ esci ; se minore di 10 va bene MOV Cifra,'0' ; altrimenti riportala a 0 esci: POP DS ; ripristino del contesto specifico POP ES ; si noti l'inversione d'ordine ... POP AX ; ... per effetto dello stack IRET ; termine della routine ISR Inizio: MOV AH,SETVECT ; funzione Set Vector MOV AL,1Ch ; tipo di interrupt MOV DX,Offset MioInt ; salvo l'offset ; il segmento non serve perchè ; CS e DS si equivalgono nei file .COM INT DOS ; aggiorna la tabella ;MOV AH,TSR ; funzione TSR MOV DX, ((Inizio-Start)/16)+11h ;lea dx,Inizio INT 21h END Start