Absolute w praktyce
fatalbomb
Dyrektywa absolute pozwala na zdefiniowanie adresu w pamięci, gdzie ma się znajdować pierwszy bajt zmiennej. Zmienną absolutną definiujemy następująco:
var Zmienna: Typ absolute segment:offset;
na przykład
type TEkran = Array [1..25,1..80] of Word;
var Ekran: TEkran absolute $B800:0000;
Jako adres możemy podać:
Adres | Typ zmiennej | Co tam siedzi? |
---|---|---|
0040:006C | Longint | Zegar czasu rzeczywistego - liczba setnych sekundy, które upłynęły od północy |
0040:0049 | byte | Tryb tekstowy (CrtMode) |
B800:0000 | Tablica 25x80 z elementami typu word | Zawartość ekranu w trybie tekstowym |
B000:0000 | Tablica 25x80 z elementami typu word | Zawartość ekranu w trybie tekstowym monochromatycznym (raczej na nowych kompach się nie przyda :-]) |
0000:0000 | tablica 256-elementowa z elementami typu longint | Wektory przerwań |
FFFF:0010 | cokolwiek mającego rozmiar 65520 bajtów | HMA (używać ostrożnie, bo potrafi powiesić system, albo nawet nieźle namieszać w komputerze) |
0040:001E | tablica 16-elementowa z elementami typu word | Bufor klawiatury |
0040:001A | byte | Offset początku bufora klawiatury (0040:x) |
0040:001C | byte | Offset końca bufora klawiatury (0040:x) |
0040:0017 | byte | Bit o wadze 128: włączony Insert bit o wadze 64: włączony Caps Lock bit o wadze 32: włączony Num Lock bit o wadze 16: włączony Scroll Lock bit o wadze 8: naciśnięty Alt bit o wadze 4: naciśnięty Ctrl bit o wadze 2: naciśnięty lewy Shift bit o wadze 1: naciśnięty prawy Shift |
0040:0018 | byte | bit o wadze 128: naciśnięty Insert bit o wadze 64: naciśnięty Caps Lock bit o wadze 32: naciśnięty Num Lock bit o wadze 16: naciśnięty Scroll Lock bit o wadze 8: niewykorzystany bit o wadze 4: niewykorzystany bit o wadze 2: naciśnięty lewy Alt bit o wadze 1: naciśnięty prawy Alt |
Zmienną taką traktujemy dalej "po staremu": możemy dowolnie używać jej jak każdej innej zmiennej bez dyrektywy absolute.
troche mało:-/ ale dobre.
Pod adresem 0040:006C jest zegar który odlicza czas co ok. 55ms. Wartością tego zegara nie jest liczba setnych sekundy, a liczba taktów 55-cio milisekundowych.