1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| comment * -----------------------------------------------------
début fonction MESURE:
Cette fonction renvoie le nb changements etats de DSR (com1) [DWORD] ,pendant le
temps "nb_cycl" passé en argument [WORD] .
------------------------------------------------------- *
mesure PROC nb_cycl:WORD ;nb_cycl contient nb pas de 54.9 ms
LOCAL com_prec :BYTE
LOCAL count_fin :WORD ;heure fin
LOCAL count_deb :WORD ;heure debut
LOCAL count_com :DWORD ;nb changements etats DSR (com1)
pushcontext all
pushfd
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
mov count_deb,bx
.while count_deb==bx ;synchro compteur temps.
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
.endw
add bx,nb_cycl
mov count_fin,bx
mov count_com,0
;debut mesure nb cycles
push ds
mov dx,040h
mov ds,dx
mov dx,word ptr ds:[0000h] ; met adresse de COM1 dans dx.
pop ds
add dx,6 ; met adresse du registre d'etat de COM1 dans dx.
in al,dx
and al,20h ;mesure le bit 5 de COM1
mov com_prec,al
boucle1 LABEL near ;entree du test
in al,dx
and al,20h ;mesure le bit 5 de COM1
.if al != com_prec
mov com_prec,al
inc count_com
.endif
;debut time dans bx
push ds
mov bx,040h
mov ds,bx
mov bx,word ptr ds:[06Ch]
pop ds
;fin time dans bx
.if bx != count_fin
jmp boucle1
.endif
popfd
popcontext all
return count_com
mesure ENDP |
Partager