Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Libreria GIOBE.ASM

Home » Programma il Computer » Tutorial Assembly

Raccolta di Procedure

  Raccolta di Procedure ASM

Delay 3/3 - Dettaglio sull'Algoritmo ASM [30 di 54] 

            1° dicembre 2003
Procedure di ritardo - Descrizione dell'algoritmo
Come la procedura di ritardo sfrutta le caratteristiche del Timer di Sistema

  

bulletNella pagina precedente abbiamo imparato che il Timer di Sistema controlla ogni evento temporale del nostro computer, scandendone la vita a suon di Tick di sistema, con frequenza di 18,2064819 Hz, cioè generando un fronte attivo ogni 54,925493 ms

  

bulletIl geniale progettista delle magiche Procedure del Bios ha previsto un intero pacchetto di Funzioni dedicate al controllo dell'Orologio in Tempo Reale, raccogliendole nella libreria INT 1AH e destinando ad esso anche numerose locazioni di sistema, nell'Area di comunicazione Bios.

  

bulletIn particolare le 4 variabili di sistema da 0000:046CH a 0000:046FH contengono il numero corrente (a 32 bit) dei Ticks prodotti nell'arco della giornata; vediamo alcuni valori assunti da questa doubleword nell'arco della giornata:
bulletalle 00:00:00 il numero vale 00000000H e, nel tempo necessario per consumare un secondo, si incrementerà 18 volte
bulletalle 00:00:01 il numero vale dunque 00000012H (12H =18 decimale, 18 Ticks)
bulletalle 00:59:59 il numero vale 0000FFF5H, corrispondente a 65525 Ticks
bulletdopo un'ora (01:00:00) il numero vale 00010007H, pari a 65548 Ticks, 18 più di prima
bulletalle 23:00:00 il numero vale 001700A8H = 1507496 Ticks
bulletalle 23:59:59 il numero vale 0018009DH = 1573021 Ticks

  

bulletDunque, al termine della giornata, poco prima delle 24:00:00, il valore corrente dei Ticks di sistema sarà 18 volte più grande, 001800AFH =1573039 e, all'arrivo del Tick successivo dovrebbe portarsi al valore , 001800B0H =1573040, ma in realtà il contenuto delle variabili si riazzera e tutto ricomincia da capo.

  

bulletLa Procedura Delay e le sue derivate Del_100, Del_1000, Del_1500 e Del_2000 utilizzano questa risorsa per generare ritardi svincolati dalla velocità del processore, precisi, affidabili e portabili.

  

bulletLa possibilità di consumare tempo (comunque multiplo di circa 55 ms) è legata alla lettura delle 4 variabili, affidata alla Funzione 00H dell'INT 1AH Bios:
bulletla prima lettura assume il numero a 32 bit corrispondente al tempo del giorno consumato fino a questo istante, al quale viene aggiunto il ritardo desiderato (in Tick); al termine il numero da raggiungere è lasciato in AX,BX
bulletseguono ulteriori letture del numero corrente, lasciate in CX,DX, fino al raggiungimento del numero predisposto in AX,BX
bulletla sequenza delle operazioni è illustrata nel seguente diagramma di flusso:

               

               

bulletLa parte iterativa del flow-chart è piuttosto intuitiva:
bulletse la parte alta dei 2 numeri è uguale (AX=CX) si controlla la parte bassa, ripetendo la lettura fino al raggiungimento dell'uguaglianza anche di questa, BX=DX (percorso blu) [esempio: AX,BX = 000F01A5H e CX,DX = 000F00A3H]
bulletquando i 2 numeri a 32 bit sono perfettamente uguali il tempo del ritardo desiderato è stato consumato correttamente (percorso marrone)
bulletse la parte alta dei due numeri numeri non è uguale, la prima (quella da raggiungere, AX) sarà (quasi) sempre più grande di 1 rispetto alla seconda (quella corrente, CX); per questo, finchè il valore di CX non raggiunge quello di AX, è inutile controllare la parte bassa e la lettura viene ripetuta attraverso il percorso verde [esempio: AX,BX = 000F01A5H e CX,DX = 000EFF1CH]
bullet...con una eccezione... [**]

               

Suggerimento La procedura Delay è particolarmente curata ed è in grado di prevedere anche un evento piuttosto improbabile ma possibile, data la sua natura, legata alla lettura del tempo corrente: il suo utilizzo a cavallo di un giorno che muore e uno che nasce...

 

bullet[**] Nella premessa ho sottolineato che subito dopo la mezzanotte il contatore passa dal valore 001800AFH a 00000000H; si rende indispensabile, quindi, un supplemento d'indagine: in questo caso:
bulletse la parte alta dei 2 numeri numeri non è uguale, la prima (quella da raggiungere, AX) sarà più grande di 24 (18H) rispetto alla seconda (quella corrente, CX); più precisamente la prima sarà AX=0018H e la seconda CX= 0000H
bulletinoltre, poichè prima di azzerarsi la parte bassa del numero corrente ha già consumato B0H Ticks, per stabilire quanti ne restano ancora da attendere bisognerà tenerne conto, sottraendone il valore prima di operare il confronto con DX (percorso rosso) [esempio: AX,BX = 0018013AH e CX,DX = 00000A3H]

    

Pagina Precedente Libreria GiobeASM Pagina Successiva Delay 3/3 - Dettaglio sull'Algoritmo ASM   Torna alla Home  del Capitolo3 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
30 di 54
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

    

Giobe.ASM » SET_cur | VIA_cur | RIP_cur | BIOScls| BIOSchr |BIObeep |Acapo| BIOchr1| STAsp| BIOSmsg
Byt2Asc | Wor2Asc | Asc2Byt | Asc2Wor | Byt2Dec | Wor2Dec | Dec2Byt | Dec2Wor
Delay | DelMicro | Del_2000 | Del1500 | Del_1000 | Del_100 | Del_1 | Del500Mi | Del200Mi
Del100Mi | Del010Mi | RIEMPI | KEYwait | Random | INstrin | CambiaCol | MODEtest
RAMchr | RAMcur | RAMmes | RAMcls | RAMcorn | RAMpiu | RAMrecup | RAMbyte | RAMword
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
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