JAL 2.4. Değişkenler
Basitçe bir değişken, değer tutan bir tanımlayıcıdır. Bu tanımlayıcılar, değeri tutmak için ne kadar boşluk gerektiğini belirleyen ilgili türlere sahiptir. Bu veri türleri hakkında bu yazıda söz etmiştik. Bir değişken tanımlayıcı için belirtilen veri türü bu değişken için bellekte ne kadar yer ayrılacağını belirler. JAL'ın kendi kılavuzunda tam değişken tanımlama formatı aşağıdaki gibidir:
1VAR [VOLATILE] [SHARED] tür[*sabitifade] tanımlayıcı [ '[' [ sabitifade ] ']' ]
2 [ { AT sabitifade [ ':' bit ] | degisken [ ':' bit ] | '{' sabitifade1[',' sabitifade2...] '}'
3 | IS degisken }
4 [ '=' sabitifade | '{' sabitifade1',' ...'}' | '"'...'"' ]
5 [',' tanımlayıcı2...]
Bu format oldukça karışık gibi görünüyor, başlangıç için oldukça korkutucu görünüyor fakat açıklamalarını yazının ilerleyen bölümlerinde yapacağım. Gelin bunu biraz basitleştirelim, en önemli noktaları ele alarak formatı yeniden oluşturalım:
1VAR [VOLATILE] [SHARED] veriTürü değişkenAdı AT bellekAdresi
Genelde değişken tanımlarken muhtemelen orjinal kılavuzdaki kadar ayrıntılı tanımlamayacağız. Dolayısıyla sadeleştirdiğim tanımlama formatı yeterli olacaktır. Ama bu eğitimin prosedürü olarak yine de orjinal formatın her bölümünün açıklamasını yapacağım. JAL kılavuzundan alıntıladığım formatın öğelerinin açıklamaları şu şekilde:
VAR
Bir değişken tanımlamasının başlangıcını gösterir. Her bir değişken tanımlamasının başına yazılmalıdır.
VOLATILE
Bu anahtar sözcük kullanılan ya da atanan değişkenin ilerisi için optimize edilmeyeceğini ve bu değişkenin bir ifade değerlendirirken yalnızca bir kez okunacağını veya yazılacağını garanti eder. Normalde bir değer atanıp hiç kullanılmamış değişkenler derleyici tarafından saptanıp ataması kaldırılır ve ona bellekte hiç yer ayrılmaz. Eğer atama bir ifade ise, ifade tümüyle değerlendirilecektir. Bir değişken kullanılmış fakat hiç atanmamışsa, değişkenin tüm kopyaları (ilgili veri türüne göre) 0 sabit değeriyle değiştirilecek ve değişken herhangi bir bellek yerine konumlandırılmayacaktır. İşte VOLATILE sözcüğü derleyicinin tanımlanan değişkeni bu optimizasyondan hariç tutmasını sağlar.
SHARED
Tanımlanmakta olan değişkenin ortak bellek bölgesine yerleştirilmesi gerektiğini derleyiciye söyler, böylece RAM bellekte bu değişken için derleyicinin bank seçimi yapmasına gerek kalmaz.
tür[*sabitifade]
/ veriTürü
Tür, veri türleri yazısında bahsettiğimiz öntanımlı
türlerden herhangi biridir. Eğer tür BIT
, BYTE
veya SBYTE
ise [*sabitifade]
kullanılarak
genişletilebilir ör. VAR BYTE*2 degiskenA
. BYTE
ve SBYTE
için, bu demek oluyor ki;
değişken *sabitifade
kullanılarak bir tamsayı biçiminde tanımlanacak, ör. daha önce
bahsettiğimiz gibi WORD
basitçe BYTE*2
için kısaltmadır.
Eğer tür BIT
ise o zaman tanımlama değişir. Bir BIT
değişkeni, JAL'da tanımlandığı şekliyle,
gerçekte boolean türüdür. Sıfır olmayan bir değer atandığında 1 değerini alır. [*sabitifade]
belirteci kullanıldığında tanım daha çok bir C bit alanı olmak üzere değişir: Değer atamaları
maskelenir. Örneğin:
1VAR BIT*2 metraj
metraj
'a değer atandığı zaman, atama şöyle olur:
1metraj = (deger & 0x03)
tanımlayıcı
Herhangi geçerli bir JAL tanımlayıcısı diğer bir deyişle değişkenAdı.
'[' [ sabitifade ] ']'
sabitifade
büyüklüğünde bir öğe dizisi tanımlar. Dizi indeksi 0'dan başlar (sabitifade
-1)'e dek
devam eder. Bir dizi tek bir PIC veri bankına sığacak şekilde tanımlanmalıdır.
Eğer sabitifade
belirtilmeyecekse (=
) kullanılarak dizinin öğeleri tanımlanmalıdır. Bu durumda
dizi için ayrılacak boyut derleyici tarafından otomatik olarak saptanır. BIT
dizileri
desteklenmez.
AT sabitifade [ ':' bit ]
Yeni değişkeni sabitifade
konumuna yerleştirir. Bu bir bit değişkeni ise, [ ':' bit ]
ifadesi,
konumla birlikte bit ofsetini yani bitin başlangıcını tanımlar. Açıkça bir yerleştirme yapılmış
hiçbir konum başka bir değişkene ayrılmayacaktır.
AT degisken [ ':' bit ]
Yeni değişkeni daha önceden var olan bir degisken'in konumuna yerleştirir. Açıkça bir yerleştirme yapılmış hiç bir konum başka bir değişkene ayrılmayacaktır.
AT '{' sabitifade1[',' sabitifade2...] '}'
Yeni değişkeni çoklu konumlara yerleştirir. PIC denetçilerde özel amaçlı yazmaçların çoğu iki ya da daha fazla veri bankına çoğaltılmıştır. Değişkenin hangi veri konumlarını tuttuğunu derleyiciye söylemek, veri erişim bitlerini optimize etmesine olanak sağlar.
IS degisken
Derleyiciye bu değişkenin bir diğer değişken için basitçe bir rumuz olduğunu söyler. Bu parametre
artık yeni sürümlerde kullanılmamaktadır, bunun yerine ALIAS degiskenB IS degiskenA
tanımlama
biçimi kullanılmalıdır.
'=' ifade
Değer atama. Değişkene ifade değeri atanacaktır.
'=' '{' ifade1 [',' ifade2...] '}'
Dizi değişkenler için yapılan değer atama biçimi. Dizinin öğelerine 0'dan başlayarak sırasıyla ifade1
, ifade2
, ...
değerleri atanacaktır.
'=' '"'...'"'
Bir değişken dizisi için, bu her bir ASCII değerini ('"'
) ve ('"'
) arasındaki değere atar.
C dilinin aksine dize (string) NULL ile sonlanmaz.
'=' "..."
Bir değişken dizisine çift tırnak işareti içinde bulunan öğeler atanır. Örneğin:
= "abc"
ile = {"a","b","c"}
eşdeğerdir.
',' tanımlayıcı2...
Aynı nitelikteki çoklu değişkenleri tanımlamaya izin verir:
1VAR BYTE a,b,c