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