Commodore sayı 74, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

10 A$- “STRING” Monitörü gene kullanırsak:

«1 002B 01 08 13 08 TA 08 1A 08 «1 0033 00 A0 00 00 00 A0

«10800 00 11 08 CA 00 41 24 B2 «1 0808 22 53 54 52 49 4E 47 22 «1 0810 00 00 00 41 80 06 09 08 0818 00 00

Sıfırıncı sayfada string alanını gösteren baytlara baktığımızda her şeyin aynı kaldığını görürüz. Bu durumda değişkenin bulunduğu yeri incelemek oldukça işimize yarayabilir.

41 80 06 09 08 00 00

İlk iki baytın değişken adını gösterdiğinden eminiz artık. Ama string türünü göstermek için $41 $00 değişkeni $41 $80 olarak yazılmış. Yani, sadece ikinci baytın son biti 1'se değişken bir string'dir. Sonraki üç baytı yorumlarsak, ilk baytın karakter dizisinin uzunluğu, diğer ikisinin de adresi olduğunu tahmin edebiliriz. Burada yazıldığına göre, A$ değişkeninin içeriği altı karakter uzunluğunda ve $0809 adresinde yer alıyor. Ne kadar ilginç değil mi? BASIC programının içindeki yeri gösteriyor A$. Bu sayede oldukça bir yer kazancı sağlayabiliriz. İyi de karakterlerden birini değiştirmeye kalkarsak ne olacak? BASIC kullanırken edindiğimiz deneyimlere göre bir string'in içeriğini değiştirmek, BASIC programının yapısını değiştirmez. Yani bilgisayarımızın böyle bir değişiklik karşısında nasıl davranacağını test etmeliyiz. Haydi bakalım programınıza şu satırı ekleyin:

20 A$-LEFTS(A$,3)

Programı çalıştırın ve emektar monitörünüzü kullanın.

«1 002B 01 08 22 08 29 08 29 08 «1 0033 FD 9F 00 A0 00 A0

00 11 08 CA 00 41 24 B2 «1 0808 22 53 54 52 49 4E 47 22 * «1 0810 00 20 08 14 00 41 24 B2 0818 C8 28 41 24 2C 33 29 00

<1 0820 00 00 41 80 30 FD 9F 00 «1 0828 00

Değişkenler $0822'den başlıyor. 0822 41 80 30 FD 9F 00 00

Deminki söylediklerimi göz önüne aldığımızda değişkenin içeriğinin 3 karakter uzunluğunda olduğunu ve $9FFD adresinde yer aldığını rahatça görebiliriz. Demek ki değişkenin içeriğinde bir değişiklik yapmaya kalkarsak, BASIC program üzerinde işlem yapılmıyor ve $A000'dan geriye sayarak bu içerik için yer açıyor. $9FFD'ye baktığımızda A$'ın son hali olan “STR” harfleriyle karşılaşırız. Bu arada string yerinin göstericisi olan $33/$34'ün de $9FFD'ye kaydığına dikkatinizi çekerim. Demin bahsettiğim token haline getirme işinin neden yapıldığını anlamak için programın içindeki LEFT$'ı bulmaya çalışın. Bulamayanlar için yerini söyleyeyim: $0818. Ne güzel, değil mi? Beş karakterlik yer ayrılacağına tüm komut LEFT$ anlamına gelen tek bir bayta sığdırılmış ($C8). Hemen hemen tüm değişken türleri hakkında bilginiz oldu artık. Geriye sadece bu değişkenlerin gruplar halinde kullanılmasını sağlayan diziler (array) kaldı. Dizileri incelemek için, NEW komutunu verdikten sonra aşağıdaki programı girin ve RUN deyin,

10 DIM A(500)

Sıfırıncı sayfa değişkenleri şu şekilde düzenlenecektir:

«1 002B 01 08 10 08 10 08 E0 11 -:0033 00 A0 00 00 00 A0

Dizi (array) olmayan hiçbir değişken tanımlamadığımız için, değişkenlerin başlangıç ve bitiş adresleri aynı adresi, yani $0810'u gösteriyor. Bu adres aynı zamanda dizilerin de başlangıç adresi olarak kullanılıyor. Diziler için ayrılmış olan alan $11E0 adresine kadar sürdüğüne göre, A dizisi için: $11B0-$0810 = $09A0 = 2512 bayt ayrılmış. $0810 adresinden incelemeye başlarsak şu baytlarla karşılaşırız:

«10810 41 00 DO 09 01 01 F5 00 «10818 00 00 00 00 00 00 00 00 «1 0820 0000 00 00 00 00 00 00

İlk iki baytın değişken adı olduğunu tahmin etmeniz pek de güç olmamıştır artık. İki MSB'de (Most Significant Bit - En Yüksek Değerlikli Bit, yani 7. bit) 0 olduğuna göre değişkenimizin kesirli sayı tuttuğunu anlarız. Sonraki iki bayt, demin hesapladığımız dizi uzunluğunu Düşük-Yüksek değerlikli bayt formunda saklıyor. Daha sonraki baytı tahmin etmeniz hemen hemen imkansız. Ancak bir iki denemeden sonra bu sayının dizinin boyut sayısını tuttuğunu anlayabilirsiniz. Buradaki örnekte A dizisinin tek boyutlu olduğunu rahatça görebilirsiniz. Bu bayttan sonra gelen $01 $F5 = $01F5 = 501, dizi elemanlarının sayısını tutar. Dikkat ettiyseniz, bizim A'yı 500 elemanlı olarak tanımlamamıza rağmen, burada 501 eleman görünüyor. Bunun sebebi, A dizisinin (çoğu zaman unutulan) 0. elemanının da sayılmasıdır. DIM A(2) kullansaydınız, A(0), A(1) ve A(2) A dizisinin üç elemanını oluşturacaktı. Buraya kadar olan bölge, dizinin genel bilgisini içeriyordu. Bu bayttan sonraki baytlarda ise, sıfırıncı elemandan başlamak üzere, dizi elemanlarının değerleri yer alır. Eğer monitörden çıkıp, direkt modda (satır numarası vermeden) şunları yazarsanız bunu daha iyi gözlemleyebilirsiniz:

Klavyeyle gezinmek için ← ve → tuşları.