Programowanie w języku Pascal

Absolute w praktyce

  • 2007-04-25 22:15
  • 2 komentarze
  • 2201 odsłon
  • Oceń ten tekst jako pierwszy
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 komentarze

guma 2008-10-07 10:21

troche mało:-/ ale dobre.

matusz128 2007-11-06 13:55

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.