64'ler sayı 16, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

JSR VE STACK (YIĞIN) Her assembly dili programını çalşıtırdığınız (execute) zaman, assambler size registerlerin değerini yazdı, SP reğisteri dahil. Şimdi SP registerinin ne olduğunu öğreneceğiz. SP yığın göstergecinin (Stack Pointer) baş harflerinden oluşur. Stack dönüş adresinin konduğu yerdir. Kompüter dallanmaya (GOSUB) gittiğinde, RETURN'den sonra dönmesi gereken yer Stack üzerinde depolanır. İşte dikkat edilecek ana noktalar: — Kompüter Stack üzerine adres saklar (depolar) — Kompüter dönüş (Return) komutuyla karşılaşır. — Kompüter Stack'tan adresi geri alır. — Kompüter o adrese döner.

Assembly dilinde GOSUB'un eşdeğeri JSR dir, Jump to Sub-Routine nin kısaltılmasından oluşur. RETURN nün eş değeri RTS dir, Return to Subroutine'nin kısaltılmasından oluşmuştur. Stack, GOSUB ve REFURN de olduğu gibi JSR ve RTS ye de aynı şekilde hareket eder.

Gerçek stack hafızanın (memory) 255 byte'tıdır ve 0100 den O1FF e kadar uzanır. Stack Pointer (SP), stack'taki bir sonraki boş byte'ı gösterir. Stack pointer FF ile başlar ki 01FF bölgesini gösterir, BASIC birkaç byte kullanır ve Stack pointer (SP) O1EF bölgesini gösterir.

Her defasında JSR veya SYS komutu kullandığınızda kompüter, dönüş adrısinin LOW byte'ını Stack'ta saklar ve Stack Pointer'i (SP) Oi eksiltir. HI byte da Stack'ta depolandıktan sonra Stack Pointer (SP) bir kere da eksilir.

RTS komutunu kullandığınızda, kompüter Stack'taki HI byte'i alır ve Stack pointer'i arttırır. Sonra Stack'taki LOW byte'ı alır ve Stack Pointer'i tekrar arttırır. Bundan sonra kompüter LOW ve HI byte'ları yanyana koyarak dönüş (return) adresini oluşturur. Adres oluştuktan sonra kompüter bu adrese döner.

BASIC'in kullandığı dallanmalara atlıyarak (jumping to subroutine) karakter print etme, cursor'u hareket ettirme gibi işlemler yaptırabiliriz. Karakter print etmek için A registerini, karakterin ASCII kodu ile yükleriz ve JSR $ FFD2: Co00 LDA #$ 41 C0O02 JSR $ FFD2 Ccoo5 RTS

Bu program A karakterini print eder, çünki A registeri A'nın ASCII değeri ile rutin çağrılmadan yüklenmiştir. Diğer karakterleri print etmek için

User's Manual daki 135-137 sayfalardaki ASCII karakterlerine bak.

Bundan sonraki rutin cursor'un X ve Y koordinatlarını hazırlar. Önce X registeri X koordinatıyla, sonra Y registeri Y koordinatıyla yüklenir. Şimdi CLC (bu komut bir sonraki bölüm de anlatılacaktır), sonra JSR $ FFFO: Cco00 LDX # $ 00 C002 LDY #$ 05

CO04 CLC CO0O5 JSR $ FFFO

Cco08 RTS

Açıkça görüldüğü gibi cursor ekranın sol üst köşesine ayarlandı. Bir önceki rutinle beraber birleştirerek ekranın herhangi bir yerine istediğin karakteri yazabilirsin.

Bu bölümün sonu, işte çözülmek üzere başka bir program: Ekranı silip cursor'u 01, 01 e ayarlıyabilirmisin? Co00 LDA # $ 93 C002 JSR $ FFD2 LDX # $ Oi COO7 LDY #$ 01 Cco09 CLC COOA JSR $ FFFO CoOOD RTS

Üstteki program clear home print eder (ASCII 93 “hex. veya 147 dec.) ve cursor'u Oi, O1 e ayarlar.

Programınızı çalışmadıysa veya yukarıdakileri anlamadıysanız üzülmeyiniz. Bu bölümü tekrar okumanızı tavsiye ederim.

PROCESSOR'UN STATUS REGİSTERİ Processor'ün status (durum) reegisteri'i (P register) bize kompüterin durumunu (state) belirtir. Bir sonraki bölümde status'un nasıl test edileceğini araştıracağız. Bu bölümde P registerinin ne olduğunu göstereceğim.

Bildiğiniz gibi bir byte içinde 8 tane bit var ve bunlar 0 veya 1 olabilir. P registeri her biti flag (bayrak) olarak kullanır. Her bit kompüterin status'una göre "set" veya "reset" olarak ifade edilir. Her bit'in ne işlem yaptığına bakalım: Bit 7: Bu negatif flag olarak adlandırılır. İşlemin sonucu 80 ile FF arasında ise 1 (set) dir. Örnek olarak, LDA #$C7 bu bit'i set (1) durumuna getirir. İşlem sonucu 00 ile 7F arasında ise bu bit reset (0) dır. Bit 6: Buna taşma flag'ı (overflow) adı verilir. Artış 7F'nin üzerine çıkarsa veya azalma 80'in altına inerse set (1), diğer durumlarda reset (0) dır. Bit 5: Bu bit hiçbir şey değildir, kullanılmaz. Bit 4: BRK (force break) dır ve sonra bahsedilecek.

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