|
 |
|
|
|
|
Przerwania... Co to w og≤le jest? Przerwania s▒ to w pewnym sensie 'funkcje systemowe oraz BIOSu'. Bez przerwa± komputer by│by tylko szar▒ skrzynk▒. DziΩki nim, tΩtni on ┐yciem. Przyk│ad: mysz. Wywo│ywana jest przerwaniem nr 33. Bez niego nie by│o by mo┐liwe leniwe zajΩcie, kt≤rym niew▒tpliwie jest klikanie oraz pod▒┐anie ga│ek ocznych za kursorem myszy.... Przejd╝my do rzeczy.
Program mycha;
uses dos,crt;
var r:registers;
begin
Deklarujemy zmienn▒ r jako rejestr. To w│a╢nie na rejestrach pracuje ca│y procesor i bez nich ani rusz ;) Wyr≤┐niamy 4 g│≤wne rejestry: ax, bx, cx, dx. Ka┐dy rejestr dzieli siΩ na dwie po│≤wki: m│odsz▒ (np. al) i starsz▒ (np. ah).
r.ax:=$0002;
intr($33,r);
readkey;
end.
Odwo│ujemy siΩ do rejestru ax i wstawiamy do niego warto╢µ 0002. W ten oto spos≤b, w 'ax' zosta│ umieszczony numer funkcji (w tym wypadku jest to nr 2) przerwania (nr 33) obs│uguj▒cego myszΩ. Funkcja ta powoduje schowanie kursora myszy. Wywo│ujemy j▒ za pomoc▒ przerwania 33 (polecenie intr).
Program mycha2;
uses dos, crt;
var r:registers;
begin
r.ax:=$0001;
intr($33,r);
r.ax:=$0007;
r.cx:=100;
r.dx:=170;
intr($33,r);
Pocz▒tek dok│adnie identyczny jak w poprzednim programie. W rejestrze 'ax' zosta│a umieszczona warto╢µ 0001, kt≤ra jest funkcj▒ odpowiedzialn▒ za wy╢wietlenie kursora mychy. NastΩpnie umieszczamy w rejestrze 'ax' warto╢µ 0007 - funkcja ta ustala graficzne wsp≤│rzΩdne osi X. Do rejestru cx wprowadzamy minimalne po│o┐enie poziome, a do rejestru dx maksymalne po│o┐enie pionowe. NastΩpnie wywo│ujemy funkcjΩ przerwaniem nr 33.
r.ax:=$0008;
r.cx:=100;
r.dx:=140;
intr($33,r);
readkey;
end.
Funkcja 0008 robi dok│adnie to samo, co poprzednia funkcja 0007 z t▒ ma│▒ r≤┐nic▒, ┐e ustala wsp≤│rzΩdne dla osi Y.
Program ktorego;
uses dos,crt;
var data, rok, miesiac, dzien, ndnia: string;
r:registers;
begin
r.ah:=$2A;
intr($21,r);
with r do
begin
str(cx,rok);
str(dh,miesiac);
str(dl,dzien);
str(al,ndnia);
end;
Deklarujemy zmienne rok, data itd. jako zmienne typu │a±cuchowego. NastΩpnie wywo│ujemy funkcjΩ 2A przerwania nr 21. Funkcja ta zwraca nam w w rejestrze cx - rok, dh - miesiac, dl - dzien, al - numer dnia tygodnia. Poleceniem str zamieniamy warto╢µ bitow▒ na ASCII i r≤wnocze╢nie podstawiamy zamienion▒ ju┐ warto╢µ pod dan▒ zmienn▒.
if r.al=$0000 then ndnia:='niedziela';
if r.al=$0001 then ndnia:='poniedzialek';
if r.al=$0002 then ndnia:='wtorek';
if r.al=$0003 then ndnia:='sroda';
if r.al=$0004 then ndnia:='czwartek';
if r.al=$0005 then ndnia:='piatek';
if r.al=$0006 then ndnia:='sobota';
data:=miesiac+'.'+dzien+'.'+rok;
writeln(data,',',ndnia);
readkey;
end.
Funkcja 2A zwraca w rejestrze al numer dnia tygodnia. I tak mamy kolejno, dla 0 - niedziele, 1 - poniedzialek, itd. NastΩpnie │▒czymy ci▒g znak≤w w │a±cuch (zmienna data). Dalej, wypisujemy 'date' oraz nazwΩ dnia tygodnia.
PhoeniX
red_red_phoenix@kki.net.pl
|
|
|
|
|
 |
|