Commodore sayı 74, sayfa 19

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 19

I0A-I

satırını girdiğiniz zaman bilgisayarınızda aşağıdaki işlemler yapılır: -$0801 bölgesi sırasıyla şu değerleri alır: -bir sonraki satırın adresi -satır numarası (Düşük değerlikli, Yüksek değerlikli) -tokenler haline getirilmiş program satırı -satır sonunu belirten $00 baytı Bir monitör programıyla bu adresi incelediğimizde şunu görürüz:

«1 0800 00 09 08 0A 00 41 B2 31 «1 0808 00 00 00

Ve program bilgilerini saklayan adreslerde şu bilgilerle karşılaşırız:

«1 002B 01 08 OB 08 OB 08 OB 08 «1 0033 00 A0 00 00 00 A0

Bu değerleri yorumlamaya çalışalım. $2B/$2C adresleri $0801 adresini gösteriyor. Burası BASIC programının başlangiç adresi. $0801 adresine bir göz atarsak burada gelecek satırın adresini, yani $0809'u bulabiliriz (tabii ki $09 $08, yani düşükyüksek değerlikli bayt formatında). Daha sonraki baytta ($0803,$0804) satır numarasını düşük-yüksek değerlikli bayt formatında bulabiliriz. Yani $OA $00 — $000A — 10. Daha sonra da programın tokenler haline getirilmiş kodunu bulabiliriz. $41 ““A” harfinin ASCII karşılığıdır. $B2 BASIC yorumcusu için *—” anlamındadır. $31'de karşılığıdır. Bunlardan sonra gelen $00 baytı da satırın bittiğini gösterir. Bir sonraki program satırı da aynı sistematikle saklanır. Ama sadece bir satır girmiş olduğumuz için bir sonraki satırın adresi yerine $0000 buluruz. BASIC yorumcusunun kabulüne göre bu değer BASIC programın bittiğini gösterir. Bunu takip eden adres, yani $080B — $2D/$2E *'de saklanır ve hem programın sorunu, hem de normal değişkenlerin başlangıcını belirtir. Herhangi bir değişkenimiz olmadığı için, Array'lerin (dizilerin) başlangıcı da bu adrestedir. Eğer programı RUN ile çalıştırırsak A değişkeni için yer ayrılır: 0800 00 09 08 0A 00 41 B2 31 0808 00 00 00 41 00 81 00 00 «1 0810 00 00

002B 01 08 OB 08 12 08 12 08 «1 0033 00 A0 00 00 00 A0

Bakın. Şimdi değişkenlerin başı olan $2D/$2E $080B'yi gösterirken, dizilerin başı olan $2F/$30 $0812'yi gösteriyor. Kısaca, $080B-$0812 arasındaki 7 bayt bizim A değişkenine ayrıldı. Bu bölgeyi incelersek:

080B 41 00 81 00 00 00 00

Değişkenlerin saklandığı alan genelde 7

bayt uzunluğundadır. Bildiğiniz gibi değişken adları maksimum iki karakter olabilir. O zaman değişken girişinin ilk iki baytı değişkenin adına ayrılmış olmalıdır. $080B'de bulunan $41 - “A” bu varsayımımızı doğruluyor. Daha sonra gelen beş bayt, kolay kullanım açısından ondalık sayı formatında A değişkeninin değerini içerir. 82 00 00 00 00 sayısı ondalık düzende 1'e eşittir zaten. Bir de tam sayı değişkenleri kullanıldığı zaman ne olacağına bakalım isterseniz. Programın ilk satırını

I0A

şeklinde değiştirdiğimiz zaman bunu yapmış oluruz. Programı çalıştıralım ve BASIC ve sıfırıncı sayfanın durumuna bakalım:

«: 002B 01 08 0C 08 13 08 13 08 «1 0033 00 A0 00 00 00 A0

«1 0800 00 0A 08 0A 00 41 25 B2 «1 0808 31 00 00 00 Ci 80 00 01

0810 00 00 00

Sıfırıncı sayfa elemanlarının ne demek istediğini kolayca anlıyor olmanız lazım artık. Ama ben kopya çekmek isteyenler için tekrarlayayım: “BASIC programı $0801'de başlıyor ve $080C'de bitiyor. Bu adreste değişkenler başlıyor ve $080C-$0813 arasını istila etmişler. $0813'te başlaması gereken diziler ise henüz ortalıkta yoklar.”. Ne kadar kolay, değil mi? Dikkat ettiyseniz BASIC programı artık bir bayt daha uzun. Çünkü “We” karakterini araya ekledik. Şimdi A% değişkenin yerini bulmaya çalışın. Ben sizi bekliyorum... Buldunuz mu? Hayır mı? O zaman birlikte inceleyelim: Demin de söylediğim gibi değişkenler $080C'de başlıyor. O adreste ne var? $C1? Sakın bu baytın $41'le bir benzerliği olmasın? Aaa, sadece $41'in son biti 1 yapılmış o kadar ($80+$41). Bir sonraki bayt da bunu doğruluyor zaten. Demek ki son bit buradaki değişken bir tam sayı olacakmış. Bir de değişkenin değerini okumayı öğrendik mi tam sayılarla işimiz bitmiş demektir.

$C1 $80'den sonraki beş bayta 00 01 00 00 00 değerleri yerleşmiş. A'nın değeri 1 olduğuna göre ya ilk iki bayt $00 $01 —$0001 — 1 anlamına geliyor, ya da çok garip bir format kullanılmış. Bir iki sayıyla değerlikli olarak A%'nın değerini sakladığını görürüz. Demek ki tam sayılar 16 bitten fazla değer alamazlarmış. Sondaki üç bayta bir iş yakıştıramadığımıza göre herhangi bir işleri yoktur. Madem üç bayt boşa kullanılıyor, tam sayı değişkenleri kullanmak programın az bellek harcamasını sağlamaz. Hızda da herhangi bir artış yoktur. Hatta kesirli sayılara çevrileceği için daha da yavaşlatır. Öyleyse tam sayı formatını kullanmamak hayrımıza olacaktır. Bir değişken türü daha var kontrol etmemiz gereken: string değişkenleri. Şu satırı girin ve çalıştırın:

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