MENU  
  Strona startowa
  Newsletter
  Rejestracja
  LOGOWANIE
  Forum
  Systemy
  WAREZ
  Chomikuj.pl
  Darmowy Hosting
  GRAFIKA
  Baner Flash
  Alfabet HTML
  Asembler Kurs
  => Czas i data
  => ADRESOWANIE PAMIĘCI
  => CZAS I RUCH NA EKRANIE
  => DYREKTYWY ASSEMBLERA
  => OBSŁUGA GŁOŚNIKA
  => GENERATOR LICZB LOSOWYCH
  => REJESTRY PROCESORA
  => PĘTLE
  => SZABLON PROGRAMU
  PIERWSZY RAZ HTML
  Hakerstwo
  Świat WWW
  Serwery Proxy
  Galeria
  GRY
  SKÓRKA DO GG
  Lockerz.com
  SKLEP
...
Czas i data

DATA I CZAS


Oprócz wielu innych funkcji , komputer posiada wewnętrzne urządzenia do odmierzania czasu. Możliwość precyzyjnego odmierzania odcinków czasowych ma istotne znaczenie w pracy komputera. Czas wykonania pewnych operacji musi być niezależny od procesora i urządzeń peryferyjnych, w oparciu o zegar czasu rzeczywistego systemy operacyjne prowadzą ewidencje plików oraz wiele innych funkcji systemowych.
Podstawowym źródłem informacji o upływającym czasie , wykorzystywanym przez system operacyjny jest systemowy. Zlicza on czas od momentu startu systemu impulsami generowanymi 18.2 razy na sekundę. odpowiedzialne jest za to przerwanie int 08H.Licznik ten kest zlokalizowany począwszy od adresu 0040:006CH. dzięki tym informacjom możemy określić kiedy komputer został załączony(zrestartowany).

W komputerze znajduje się także zegar czasu rzeczywistego. Pokazuje on czas w takiej formie do jakiej przyzwyczajeni są ludzie. Do obsługi zegarów służy przerwanie 1AH oraz funkcje 2AH-2DH
przerwania 21H. Podstawowym przerwaniem jest oczywiście 1AH które składa się z kilku funkcji. Funkcja 00H przerwania 1Ah odczytuje licznik zegara systemowego

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

00H

-

-

-

-

-

-

-

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

00H-brak przepełnienia

-

-

Licznik (najstarsza część)

Licznik (starsza część)

Licznik (młodsza część)

Licznik (najmłodsza część)

-

-



Do ustalenia nowej wartości licznika zegara systemowego służy funkcja 01H przerwania 1AH.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

01H

-

-

-

Licznik (najstarsza część)

Licznik (starsza część)

Licznik (młodsza część)

Licznik (najmłodsza część)

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

-

-

-

-

-

-



Przerwanie 1AH obsługuje również zegar czasu rzeczywistego RTC. Funkcja 02H przeznaczona jest do odczytu aktualnego czasu zegara RTC.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

02H

-

-

-

-

-

-

-

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

Godziny w kodzie BCD

Minuty w kodzie BCD

Sekundy w kodzie BCD

-

-

Jeśli znacznik CF jest równy jeden to zegar nie pracuje



Kolejna funkcja służy do ustawienia czasu RTC AT.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

03H

-

-

-

Godziny w kodzie BCD

Minuty w kodzie BCD

Sekundy w kodzie BCD

1 - czas letni

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

-

-

-

-

-

-



Poza zegarami przerwanie 1AH obsługuje także kalendarz.Do odczytu daty RTC przeznaczona jest funkcja 04H.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

04H

-

-

-

-

-

-

-

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

Wiek w kodzie BCD

Rok w kodzie BCD

Miesiąc w kodzie BCD

Dzień w kodzie BCD

-

-



Przerwanie 1AH pozwala na też na ustawienie daty RTC AT. Przeznaczona jest do tego celu funkcja 05H.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

05H

-

-

-

Wiek w kodzie BCD

Rok w kodzie BCD

Miesiąc w kodzie BCD

Dzień w kodzie BCD

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

-

-

-

-

-

-

Poza obsługą zegarów i kalendarza w komputerze znajduje się alarm (budzik RTC AT) który możemy ustawić na konkretny czas. W wybranym czasie zostanie uruchomione przerwanie 4AH z procedurą reakcji alarmu, z reguły jest to sygnał dźwiękowy.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

06H

-

-

-

godziny w kodzie BCD

minuty w kodzie BCD

sekundy w kodzie BCD

-

-

-

Powrót po INT 1AH

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

-

-

-

-

-

ustawiony znacznik CF - RTC nie pracuje lub budzik już nastawiony



Do wyłączenia budzika RTC AT służy funkcja 07H przerwania 1Ah.
Zegar RTC i datę możemy ustawiać oraz odczytywać także funkcjami przerwania 21H. Różnią się one tym od funkcji przerwania 1AH tym , że operują na liczbach w systemie dziesiętnym. Funkcja 2AH zwraca aktualną datę.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

2AH

-

-

-

-

-

-

-

-

-

Powrót po INT 21H

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

dzień tygodnia(0-niedziela ,..., 6-sobota)

-

-

starsza część roku

młodsza część roku

miesiąc

dzień

-

-



Funkcja 2BH perwrwania 21H ustawia aktualną datę.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

2BH

-

-

-

Starsza część roku

Młodsza część roku

Miesiąc

Dzień

-

-

Powrót po INT 21H

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

0H-prawidłowa data
0FFH-błąd

-

-

-

-

-

-

-

-



Funkcja 2CH zwraca aktualny czas.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

2CH

-

-

-

-

-

-

-

-

-

Powrót po INT 21H

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

-

-

-

godziny

minuty

sekundy

setne sekundy

-

-



Natomiast do ustalania czasu służy funkcja 2DH.

Wywołanie

AH AL BH BL CH CL DH DL Bufor inne

2DH

-

-

-

godziny

minuty

sekundy

setne sekundy

-

-

Powrót po INT 21H

AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne

-

0 - prawidłowy czas
0FFH-błąd

-

-

-

-

-

-

-

-



Poniżej podaję kod programu do przetrenowania poznanych wyżej wiadomości oraz jego analizę.
cseg segment
assume cs:cseg, ds:dane
pisz_znak proc
; znak jest dany jako parametr w AL
push AX
push BX
;zapamietanie rejestrow modyfikowanych w procedurze
mov ah,0EH
mov bx,0
int 10h
;przywracamy poprzednią zawartość AX i BX
pop BX
pop AX
ret
endp

pisz_nr proc
;procedura wypisujaca dwucyfrowa liczbe ktora podajemy do procedury w
;AL; algorytm jest troche lamerski, ale do naszych celow starczy
;OK - najpierw zapamietajmy rejestry, ktore bedziemy zmieniac w
;procedurce coby nie namieszac
push AX
push BX
;Ten algorytm zadziala dla AL <=99 - czyli dwoch cyfr.
;1. Dzielimy al przez 10, wypisujemy dziesiatki i jednosci
mov ah,00h
mov bh,10h
div bh
;AL zawiera iloraz AX/10
;AH zawiera reszte.
add al,'0'
;dodanie do AL kod ASCII znaku zero tak, ze obecnie al zawiera kod
;ASCII pierwszej cyfry w liczbie
call pisz_znak
mov al,ah
;teraz AL zawiera reszte z dzielenia, wypisujemy ja tez na ekran
add al,'0'
call pisz_znak
pop bx
pop ax
ret
endp

piszdate proc
;wypisuje date
mov ah,09h
mov dx,offset(jestdata)
int 21h
mov ah,2ah
int 21h
;teraz: cx=rok, dh=mies, dl=dzien
;piszemy dzien
mov al,dl
call pisz_nr
mov al,'-'
call pisz_znak
;piszemy miesiac
mov al,dh
call pisz_nr
mov al,'-'
call pisz_znak
;napisalismy procedure dla dwoch cyfr tutaj trzeba
;wypisac rejestr dwubajtowy (rok jest w formacie 1980-2079), ale
;obejdziemy to bardzo prosto - odejmiemy 1900 od cx, i zostanie nam w
;formacie 80-179 tzn. po dwutysiecznym roku zaczalby źle działać, ale nie
;zacznie, gdyz odejmiemy 100 (179-100=79).
sub cx,1900
cmp cl,100
jb przed2tys
;porownujemy mlodszy bajt CL z wartoscia graniczna - 100.
;Jesli jest mniejsze od 100 to znaczy, ze jest przed
;dwutysiecznym; jesli jest inaczej, to jest po dwutysiecznym i najpierw
;wypiszemy '20' a pozniej cl-100, czyli np. 20 | 75 - oczywiscie bez |
;wyjdzie 2075.
;no to piszemy '20'

mov al,20
call pisz_nr
sub cl,100
przed2tys:
mov al,cl
;piszemy dwie ostatnie cyfry roku
call pisz_nr
mov ah,09h
Lea dx,crlf
int 21h
ret
endp

piszczas proc
mov ah,09h
mov dx,offset(jestgodz)
int 21h
mov ah,2ch
int 21h
;teraz: ch=godz, cl=min, dh=sek
mov al,ch
call pisz_nr
mov al,':'
call pisz_znak
mov al,cl
;minuta
call pisz_nr
mov al,':'
call pisz_znak
mov al,dh
;sekunda
call pisz_nr
mov ah,09h
LEA dx,crlf
int 21h
ret
endp;


start:
mov ax,dane;
mov ds,ax
call piszdate
call piszczas
mov ax,4c00h
int 21h
cseg ends

dane segment
crlf db 13,10,'$'
jestdata db 'Dzisiaj jest $'
jestgodz db 'Jest godzina $'
dane ends

end start


Przerwanie zegarowe użytkownika


Przerwanie zegarowe urzytkownika jest wywoływane przy każdej modyfikacji zegara systemowego(co ok 50ms) Początkowo procedura tazawiera tylko instrukcję IRET. Przechwyując to przerwanie musisz pamiętać że jest ono wywoływane przez przerwanie sprzętowe IRQ0 dlatego inne przerwania nie będą przyjmowane dopóki nie zostanie przekazany do kontrolera 8259A sygnał o zakończeniu tego przerwania. Powoduje to , że podczas trwania tego przerwania nie można np. czytać z klawiatury itp.
Teraz 11182 odwiedzający (25985 wejścia)
Logowanie  
 
Nazwa użytkownika:
Hasło:
 
 
 
 
 
   
Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja