# lp.s # Stefano Salvi - 3/9/02 # Programma che visualizza delle configurazioni rotative sui # LED connessi alla porta parallela #.text parte codice #.data dati inizializzati #.bss dati non inizializzati # Costanti __NR_ioperm = 101 __NR_nanosleep = 162 __NR_exit = 1 KERNEL = 0x80 PARDOUT = 0x378 PARCTL = 0x37a NUMPORT = 4 NUMCONF = 6 .data # Dati da visualizzare tab: .byte 0x81 .byte 0x42 .byte 0x24 .byte 0x18 .byte 0x24 .byte 0x42 #struttura in input per nanosleep deli: .long 0 #secondi .long 100000000 #nanosecondi 100 000 000 = 0,1 S i: .long 0 # Configurazione corrente count:.long 10 # Numero ripetizioni .text .globl _start _start: movl $__NR_ioperm,%eax # funzione movl $PARDOUT,%ebx # port iniziale movl $NUMPORT,%ecx # numero port movl $0x1,%edx # azione -> 'riserva' int $KERNEL # Chiamo il kernel nop nop movb $0x0f,%al # metto a 0 i bit di controllo del modo movw $PARCTL,%dx # dx punta alla porta dati outb %al,%dx # mando fuori il dato per alimentare i tasti lp: movl i,%ebx # Recupero indice configurazione movb tab(%ebx,1),%al # metto in al tab[i] movw $PARDOUT,%dx # dx punta alla porta dati outb %al,%dx # mando fuori la configurazione movl $__NR_nanosleep,%eax # nanosleep movl $deli,%ebx # Ritardo richiesto (input) movl $0,%ecx # Ritardo rimanente (output) non mi serve int $KERNEL # chiamo il kernel incl i # incremento indice configurazione cmpl $NUMCONF,i # e' arrivara a 8? jne lp # se no, resta in ciclo movl $0,i # se 8 -> riporto i a 0 decl count # decremento il numero di volte jne lp # se non sono a 0, ripeto movl $0,%ebx # first argument: exit code movl $__NR_exit,%eax # system call number (sys_exit) int $KERNEL # call kernel