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ć:

AdresTyp zmiennejCo tam siedzi?
0040:006CLongintZegar czasu rzeczywistego - liczba setnych sekundy, które upłynęły od północy
0040:0049byteTryb tekstowy (CrtMode)
B800:0000Tablica 25x80 z elementami typu wordZawartość ekranu w trybie tekstowym
B000:0000Tablica 25x80 z elementami typu wordZawartość ekranu w trybie tekstowym monochromatycznym (raczej na nowych kompach się nie przyda :-])
0000:0000tablica 256-elementowa z elementami typu longintWektory przerwań
FFFF:0010cokolwiek mającego rozmiar 65520 bajtówHMA (używać ostrożnie, bo potrafi powiesić system, albo nawet nieźle namieszać w komputerze)
0040:001Etablica 16-elementowa z elementami typu wordBufor klawiatury
0040:001AbyteOffset początku bufora klawiatury (0040:x)
0040:001CbyteOffset końca bufora klawiatury (0040:x)
0040:0017byteBit 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:0018bytebit 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.

2 komentarzy

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.