>2 10. Przykłady programów
DCZATEK......................... |
F PROC |
0000 PROGRAM |
Length = 0072 |
ESZTA................................ |
L WORD |
07D4 DANE | |
EKUNDY............................ EST.ASM |
L BYTE Symbols-2 |
07DA DANE | |
ETNE SEK......................... |
L BYTE |
07DB DANE | |
TART................................... |
L NEAR |
0000 PROGRAM | |
EKSr................................... |
LBYTE |
07DC DANE | |
rYNIKI.................................. |
N PROC |
0072 PROGRAM |
Length = 003D |
ERO..................................... |
Number |
0030 | |
N AK_N AEKRAN........... |
LNEAR |
00BE PROGRAM | |
>0000..................................... |
L NEAR |
0088 PROGRAM | |
?0001..................................... |
L NEAR |
009E PROGRAM | |
?0002..................................... |
LNEAR |
00AD PROGRAM | |
70003..................................... |
L NEAR |
00CE PROGRAM | |
70004..................................... |
L NEAR |
00FC PROGRAM | |
70005..................................... |
L NEAR |
0113 PROGRAM | |
70006..................................... |
L NEAR |
012A PROGRAM |
259 Sourcc I .ines 308 Total Lines 64 Symbols
8874 Byt es symbol space frec 0 Waming Errors 0 Sevcre Errors
Przykładowe wyniki czasu wykonywania powyższego testu na różnych komputerach iostępnych w kraju.
Typ komputera proecsor.częstotliwośC |
Czas wykonywania testu z wyświetlaniem |
w [min:sek] bez wyświetlania |
tarta graficzna XT. 8088,4.88 MHz, CGA |
1:15.85 |
0:28.50 |
KT. 8088.5 MI Iz. CG A |
1:15.41 |
0:27.79 |
XT, 8088.10 MHz, EGA. |
0:49.54 |
0:13.56 |
AT. 80286.8 mHZ EGA. |
0:28.23 |
0:4.61 |
AT, 80286,10 MHz. EGA |
0:13.89 |
0:3.68 |
“super" AT, 80386. 16 MHz, EGA |
0:19.77 |
0:1.92 |
Program pokazuje sposób dołączania do procedur rezydujących w ROM BIOS, własnej obsługi przerwania. Ponieważ sposób obsługi przerwania 09H zostaje zmieniony (komunikacja z klawiaturą), uruchomienie programu jest nieco uciążliwe. Nic można bowiem w niektórych momentach korzystać z programu uruchomieniowego (np. ASD), który zakłada standardową obsługę klawiatury komputera. Zapoznanie się z przykładem pozwoli zrozumieć także, stosowane często w różnych programach demonstracyjnych, mechanizmy pozwalające na symulowanie uderzeń w klawisze i tym samym automatyczne wykonywanie pewnych operacji. Pozostaje przy tym wrażenie, że ktoś" faktycznie siedzi przy klawiaturze.
powered by
10.2. Symulacja klawiatury
Czytelnik sam zorientuje się zapewne, że program może być wykorzystany do zrobienia dobrego żartu koledze programiście. Program można prosto przerobić tak, aby uruchamiał się o określonej godzinie i zaczął ' sam'* wykonywać pewne operacje (np. uruchomić grę komputerową i sam w nią grać) wprowadzając w zdumienie programistę, który mając zablokowaną klawiaturę może jedynie patrzeć zdziwionym wzrokiem na to co się dzieje.
Program jest przygotowany w jednym segmencie, nie posiada własnego stosu i musi być zapisany do pliku o rozszerzeniu COM. Programy rozpoczynają się definicją struktury danych wykorzystywaną do zapamiętywania w programie adresów logicznych, tzn. zawartości rejestrów IP oraz CS. Następnie zdefiniowano pełny blok PSP, zgodnie z tabl. 8.2.
Należy tutaj zaznaczyć, że w ogólnym przypadku nie ma potrzeby definiowania bloku PSP w programie zapisanym w pliku o rozszerzeniu COM. Blok ten jest tworzony automatycznie w czasie generowania programu wynikowego, który w takim przypadku musi rozpoczynać się dyrektywą ORG 100H. W przykładzie zdefiniowano go w celach dydaktycznych, w programie jest też wykorzystywana wartość enviroment.
Właściwy program składa się z trzech części. Część pierwsza, rozpoczynająca się od etykiety starty jest wykonywana jednokrotnie po wywołaniu programu i jej funkcje sprowadzają się do: zadeklarowania systemowi nowych adresów procedur obsługi przerwań od klawiatury 09H oraz zegara ICH, zapamiętania adresów poprzednich oraz zaznaczenia, że nowe procedury obsługi tych przerwań mają pozostać w pamięci operacyjnej. Dwie kolejne części programu to nowa obsługa przerwań. Procedura klawiatura testuje, czy naciśnięty został klawisz + lub - na dodatkowym polu numerycznym klawiatury i ustawia odpowiednio semafor aktywny, od stanu którego zależy sposób pracy drugiej procedury. Jeżeli program jest aktywny {aktywny = 1), to nie jest uruchamiana standardowa obsługa klawiatury i komputer nic reaguje na naciskanie klawiszy (oczywiście z wyjątkiem klawisza - na prawym polu). W lej sytuacji, w procedurze musi znaleźć się sekwencja zerująca bit kontrolny w rejestrze o adresie 61H oraz wyzerowanie przerwania pochodzącego od klawiatury. Wyjście z procedury odbywa się przez rozkaz IRET. Gdy semafor aktywny = 0 i nie został wciśnięty klawisz +, wówczas następuje przejście do standardowej obsługi klawiatury w ROM BIOS i komputer działa normalnie. Procedura duszek jest włączona szeregowo do dotychczasowej obsługi przerwania zegarowego. Jeżeli semafor aktywny = 0, to nic jest wykonywane żadne działanie. Jeżeli program jest aktywny, to rozpoczyna symulowanie działania klawiatury, tzn. wprowadza kolejne znaki do systemu i za pomocą głośnika imituje dźwięk tak, jakby rzeczywiście ktoś uderzał w klawisze. Aby zrozumieć działanie tej części programu, trzeba wyjaśnić w skrócie działanie standardowej procedury obsługi bufora klawiatury. W komputerach klasy IBM PC czytanie klawiatury odbywa się za pośrednictwem przerwania INT 09H. Każdorazowe naciśnięcie klawisza powoduje wygenerowanie przerwania sprzętowego, procedura obsługi tego przerwania czyta kod ASCII oraz tzw. Scan-Codc naciśniętego klawisza i zapamiętuje go w buforze rozpoczynającym się od adresu 0040H:001EH. W buforze można zapamiętać maksymalnie kody 16 znaków. Gdy bufor zostanie przepełniony, co może mieć miejsce gdy znaki są wprowadzane zbyt szybko lub program nie odczytał wcześniej wprowadzonych