 | La procedura
è parzialmente scritta in linguaggio
Assembly. E' probabile che il lettore, in questo momento, non sia in possesso delle
conoscenze di base della programmazione a basso
livello, per cui questa pagina pụ risultare
incomprensibile; desidero fornirtela comunque, come stimolo per approfondire questa potente tecnica di programmazione
(vedi Sezione
Tutorial Assembly).
 | La
tecnica con cui il ritardo è realizzato è ancora legata, per certi versi, al
Timer di Sistema ma si basa ora sulla chiamata di una particolare
Funzione di
INT 15H BIOS, espressamente dedicata a questo
servizio |
 | La
Funzione 86H di
INT 15H è in grado di realizzare ritardi di straordinaria
precisione, dal minimo
di 976 nanosecondi. |
 | Notare
l'algoritmo utilizzato per evidenziare la parte alta (NumHi)
e quella bassa (NumLo) del numero
esadecimale a 32 bit corrispondente al parametro "ritardo" |
 | Per saperne di più
consulta la Scheda
dedicata al Timer
di Sistema
nella Sezione
Dentro il Computer. |
Codice Sorgente |
|
 |
 |
 |
PROCEDURE
Delay1 (ritardo:longint);
VAR NumHi,NumLo:word;
BEGIN
NumHi">NumHi:=ritardo DIV 65536;
NumLo:=ritardo-NumHi*65536;
asm
PUSH AX
PUSH CX
PUSH DX
MOV CX,NumHi
;Prepara in CX,DX
i valori corrispon-
MOV DX,NumLo ;denti al
numero desiderato passato
;in ingresso nel parametro "ritardo"
MOV AH,86H
INT 15H
POP DX
POP CX
POP AX
end
END;
|
|