JAL 2.4. Değişkenler

JAL - 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
comments powered by Disqus