VAR
Słowo VAR
rozpoczyna sekcję deklaracji zmiennych.
var
label: type;
label: type = value;
var
a: word;
b: byte = 1;
c: Boolean = true;
s: string = 'Atari';
tb: array [0..3] of byte = (0,1,2,3);
VOLATILE
Modyfikator VOLATILE
oznacza zmienną jako tzw. ulotną. Oznaczenie jako VOLATILE
powoduje wyłączenie optymalizacji kodu wynikowego dla tej zmiennej,
jest to przydatne w przypadku rejestrów sprzętowych których wartości mogą ulegać zmianie przy każdym kolejnym odczycie.
var
[volatile] joy : byte absolute $ff08;
pio : byte absolute $fd30;
begin
repeat
pio := $ff;
joy := 2;
if (joy xor $ff) = 1 then writeln('UP');
until false;
end.
STRIPED
Modyfikator STRIPED
pozwala dla tablic nie przekraczających maksymalnej liczby elementów 256
, typu prostego (WORD
, SMALLINT
, CARDINAL
, INTEGER
,SHORTREAL
, REAL
, POINTER
) zmienić sposób alokacji danych.
var
[striped] tab: array [0..255] of cardinal;
adr.tab
adr.tab+$100
adr.tab+$200
adr.tab+$300
ABSOLUTE
Modyfikator ABSOLUTE
pozwala ustalić adres w pamięci dla zmiennych VAR
.
var
a: byte absolute $0600;
tb: array [0..255] of byte absolute $a000;
tab: array [0..3] of byte;
v: integer absolute tab;
procedure test(var buf);
var ptr: PByte absolute buf;
REGISTER
Modyfikator REGISTER
ustala adres pamięci dla zmiennych VAR
na stronie zerowej (maksymalnie można przydzielić 16 bajtów).
var
a: byte register;
c: integer register;
UWAGA:
Z tego samego obszaru 16 bajtów strony zerowej korzysta kompilator alokując tam swoje programowe rejestryEDX
ECX
EAX
dlatego użycie modyfikatoraREGISTER
nie jest możliwe kiedy procedura lub funkcja również korzysta zREGISTER
.
procedure test(a,b,c: integer); register;
Umieszczenie zmiennych na stronie zerowej oznacza ich szybsze przetwarzanie przez CPU 6502
, pozwala też kompilatorowi w przypadku typu PByte
lepiej optymalizować kod.
var ptr: PByte register;
begin
ptr:=pointer($bc40);
ptr[5]:=ord('A'~);
end.
zostanie wygenerowany
lda #$40
sta PTR
lda #$BC
sta PTR+1
ldy #$05
lda #$21
sta (PTR),y
Jeśli ptr
nie zostanie umieszczone na stronie zerowej, wynikiem będzie
lda #$40
sta PTR
sta :bp2
lda #$BC
sta PTR+1
sta :bp2+1
ldy #$05
lda #$21
sta (:bp2),y