|
Le code suivant faire de faire une fonction Sleep.
;------------------------------------------------
ram16_Delay PROC
; Synopsis: Create an n-millisecond delay
; Receives: EAX = milliseconds
;------------------------------------------------
pushad
mov ebx,1000000
mul ebx
mov ebx,15085
div ebx
mov ecx,eax
and ecx,ecx
jz fin
in al,61h
and al,10h
mov ah,al
@@:
in al,61h
and al,10h
cmp al,ah
je @B
mov ah,al
dec ecx
jnz @B
fin:
popad
ret
ram16_Delay ENDP
Il fonctionne sur le principe que l'IRQ 0 (ou int 8, Timer System) est générée environ 18,2 fois par seconde.
L'IRQ 0 est générée tout les 65536 signaux émis par le timer.
A chaque signal, le bit 4 (LSB=0,MSB=7) du port 61h est inversé.
On peut donc mesurer le temps en comptant le nombre d'inversion de ce bit.
|