Libreria delle ProcedureGestione Tempo, Ora & Data

Entra nella Libreria GIOBE.TPU

 Delay0 

CODICE SORGENTE [3 di 4]  

    
bulletLa 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 può risultare incomprensibile; desidero fornirtela comunque, come stimolo per approfondire questa potente tecnica di programmazione (vedi Sezione Tutorial Assembly).
    
bulletCome prima cosa si occupa di leggere il contenuto delle 4 locazioni di sistema da 0000:046CH a 0000:046FH, contenenti il numero corrente (a 32 bit) dei TICK prodotti nell'arco della giornata
bulletNe controlla poi il valore fino al momento in cui viene raggiunto il nuovo valore, che tiene conto del ritardo desiderato.
Da notare che, al raggiungimento della mezzanotte, tale numero viene azzerato.
bulletPer saperne di più consulta la Scheda dedicata al Timer di Sistema Sezione Dentro il Computer.
   
Codice Sorgente   Mostra Effetto Esegui il Programma Scarica l'Esempio d'Applicazione
PROCEDURE Delay0 (ritardo:word);  
BEGIN

  asm
    PUSH  AX
    PUSH  BX
    PUSH  CX
    PUSH  DX

    MOV   CX,
ritardo ;Copia in BX il numero corrispondente
    PUSH  CX         ;al RITARDO desiderato passato in in-
    POP   BX         ;resso in "
ritardo"

                     ;Restituisce in CX,DX il  tempo reale
                     ;corrente del giorno  assumendolo dal
   
MOV   AH,00H     ;contenuto delle locazioni di sistema
   
INT   1AH        ;da 0000:046C a 0000:046F cioè il nu-
                     ;mero a 32 bit dei TICK prodotti nel-
                     ;l'arco della giornata

                     ;Aggiorna con il numero corrisponden-
    ADD   DX,BX      ;te al Ritardo desiderato   il valore
    JNC   @@0        ;CX:DX  dei  TICK relativi alla prima
    INC   CX         ;lettura delle variabili  di  sistema
                     ;da 0000:046C a 0000:046F

@@0:PUSH   CX        ;Copia in AX,BX  il numero  dei  TICK
    PUSH   DX        ;relativi alla  prima  lettura  delle
    POP    BX        ;variabili di sistema  da 0000:046C a
    POP    AX        ;0000:046F,  AGGIORNATA con il numero
                     ;corrispondente al RITARDO desiderato

@@1:PUSH   AX        ;In uscita AX,BX conservano il numero
    PUSH   BX        ;di TICK relativi alla  prima lettura
   
MOV    AH,00H    ;delle   variabili   di  sistema   da
   
INT    1AH       ;0000:046C  a  0000:046F;  e in CX,DX
    POP    BX        ;quello  del  tempo  reale  corrente
    POP    AX
              ;
{*****************************************}
              ;
{Controlla se il valore corrente dei TICKs}
              ;
{è quello previsto dal  desiderato RITARDO}
              ;
{*****************************************}
                    ;Se la parte alta dei 2  numeri  è la
                    ;stessa, cioè se AX=CX, si  controlla
    CMP     AX,CX   ;la parte bassa (a livello @@2)...
    JZ      @@2     ;altrimenti AX è quasi sempre maggiore
                    ;di 1 rispetto a CX; in questo caso si
                    ;aspetta che le 2 parti alte si equi-
                    ;valgano (a livello @@1, più sotto...)

    PUSH    AX      ;Solo se nel frattempo  è  passata  la
    SUB     AX,CX   ;mezzanotte la differenza tra AX e  CX
    CMP     AX,18H  ;è diversa da 1;in questo caso infatti
    POP     AX      ;vale 18H, per  cui  la  procedura  va
    JNZ     @@1     ;adattata alla nuova situazione (nella
                    ;parte di codice ASM qui sotto...)

    PUSH    BX      ;Se nel frattempo è passata la  mezza-
    SUB     BX,00B0H;notte la differenza  tra AX  e  CX  è
    CMP     BX,DX   ;pari a 18H; in questo  caso  CX,DX  è
    POP     BX      ;passato da 001800AFH a 00000000H, per
    JG      @@1     ;cui anche la parte bassa  va adattata
    JMP     @@3     ;alla nuova situazione, visto che una
                    ;parte del conto è già stata consumata

@@2:CMP     BX,DX   ;Se la parte alta  dei  2  numeri è la
    JG      @@1     ;stessa e la  parte  bassa  del  tempo
                    ;corrente  è  minore, BX>DX , continua
                    ;l'attesa

@@3:POP     DX      ;
    POP     CX      ;
    POP     BX      ;Il ritardo è stato consumato
    POP     AX

  end
END;
    
Pagina Precedente Tempo, Data & Ora Pagina Successiva Delay0 Lezioni - Vai al DownLoad dei files DOC Torna al Menu "Tempo, Data & Ora"
Esempio Sorgente Mostra
4 di 27

    

PASCAL  »

Libreria Giobe | Librerie Standard | Allegati | Applicazioni | Info | Download
PROCEDURE  »   Caratteri | Mouse | Tastiera | Tempo, Data & Ora
Box | Cornici | Cursore | Aree a Riga Intera | Aree a Schermo Totale
FUNZIONI  »   Caratteri | Mouse | Tastiera | Tempo, Data & Ora
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati