Geçen sayıda, makina dilinin, her biri birer sayıyla ifade edilen birtakım komut kodlarıyla, bunları izleyen bir veya İki byte'lik değerlerden (parametrelerden) oluştuğunu anlatıp. içinde 7 farklı komut bulunan bir programcık verdik. Sıra gel- di temel birkaç komutu öğrenmeye. MADDE 1: Makina dilinin mantığı, BASIC'ten daha basittir. Komutların büyük çoğunluğu, şu işlerden sadece birini yapar: a) Bellekte bir sayıyı alıp başka bir adrese koymak (POKE ve PEEK gibi). b) Bir sayı üzerinde basit aritmetik veya mantıksal işlemler yapmak. c) Program içinde bir yerden öbü- rüne atlamak (GOTO, GOSUB, IF.... GOTO gibi). MADDE 2: BASİC'teki değişkenlerin görevini, makina dilinde bir bakıma gören, sayıları yükleyip, aynen veya değiştirerek başka yere taşıyan üç adet REGİSTER mevcuttur. Atalarımız bu kavramı Osmanlıca'ya merkep (yük taşı- yıcı) diye çevirmişler; ben de öyle ya- pacağım. Baş merkebin adı akkümü- latör olup. A diye kısaltılır. Yardımcı- ları X ve Y'dir. Üçünün huyu, yapabi- lecekleri işler biraz farklıdır. Hal böyle olunca, makina dilinin te- mel bırkoç komutu da ortaya çıkmış oluyor LDA Load A: Baş merkebi yükle. LDA'yı izleyen bir veya iki değer, yük- lenecek malın ne olduğunu gösterir. LDY ve LDX: Yardımcılarını yükle. Yu- karıdaki gibi. STA - Store A: Baş merkebin yükünü boşalt. Bu komutu daima, akkümüla- tördeki değerin nereye konulacağını gösteren bir bellek adresi İzler. STY ve STX: Y ve X'in değerini boşalt. STA gibi. Merkeplere yüklenecek malın cin- si, O ile 255 arası bir sayıdır. Sayının hangi sayı olduğunu söyle- menin ise birkaç yolu vardır: 1) Sayıyı, olduğu gibi belirtmek. Bu- na dolaysız (immediate) yöntem adı verilir. 2) Merkeplerden birine, belli bir bel- lek adresinde ne sayı varsa onu yük- lenmesini söylemek. Buna adresleme deniyor. Adreslemenin 8 çeşıdı var. Al- tısını bu sayıda göreceğiz. LDA, LDY ve LDX komutlorının de- mek ki, ilke olarak toplam 9'ar çeşidi mümkün. STA, STY ve STX'te ise dolay- sız yöntem sözkonusu değil; çünkü bu komutlar zaten merkebe yüklenmiş olan sayıyı, her ne ise, belli bir adrese koymayı emrediyorlar. Şimdi şunu iyice anlayalım: Makina dilinde bu komutların farklı çeşitlerinin her biri ayrı bir sayısal komut koduyla belirtiliyor. Yani dolaysız LDA ile, mut- lak adresli LDA, Xindeksli adresli LDA, dolaylı adresli LDA, vb. farklı kodlara sahip. Bu kodlara göre, komutu izle- yen parametrenin sayı mı, adres mi, neyin nesi olduğunu makina anlaya- biliyor. A9 rakamı (desimal olarak ne ediyor?) dolaysız LDA demek. Haliyle, sadece 1 byte parametre alıyor. A9 0O0-LDA 3& $00— Akkümülatöre O yükle A0 Dolaysız LDY demek. 1 byte pa- rametre alıyor. AO 25—LDY # $25- Y'ye 25 yükle. A2 Dolaysız LDX demek. A2 FF-LDX Ş& SFF-X'İ FF'le, Assembiy dilinde # işareti, izleyen rakamın dolaysız bir rakam olduğunu, yani adres no'su olmadığını belirtir. $ ise hex demek. Yukarıda örnekteki # $25, bizim bildiğimiz yirmibeş değil, hex 25, yani 16X24-5-37. Âit çe || —— aai v ADRESLEME YÖNTEMLERİ Adresleme çeşitlerine geçmeden önce, evvela; MADDE 3: 6510 mikroprosesörünün tüm adresleri iki byte'lik rakamlarla numaralanmıştır. En küçük adres 0000, en büyük adres FFFF (yani 65535)'tir. Makina dilinde, bu adres- ler daima ters sırayla, yani önce kü- çük byte, sonra büyük byte olarak ya- zılir. Hex 1234 (yani 4660) numaralı ad- res, makina dilinde 34 12 diye yazılır. Hex COD0 (49152) adresi, 00 CO ola- rak belirtilir. ADRESLEME ÇEŞİDİ 1: En basiti, mut- lak adresleme. Komutu, alçak-yüksek iki byte halinde yazılmış bir adres iz- er. AD, mutlak adresli LDA komutunun kodudur; iki byte parametre alır. AD 00 CO-LDA $C000- C0O00D adre- sinde hangi sayı varsa o sayıyı akkü- mülatöre yükle. 80, mutlak adresli STA komutu kodu- dur. 8001 CO-STA $CD041 - Akkümü- latörde ne varsa CO0 adresine koy. commodore ADRESLEME ÇEŞİTLERİ 2 VE 3: X ve Y indeksli adresleme. Komutu izleyen iki byte'lik adresten X veya Y kadar öte- sinde adrese baktırır. 80, X indeksli LDA komutunun sayı- sal kodudur. Anlamı şudur: X'te o an- da hangi sayı varsa, LDA komutunu iz- leyen adresten o kadar sonraki adres- teki sayıyı akkümülatöre yükle! Örnek: A2 10 1 LDX # 510 BD O00 CO LDA $SC000,X-— Aküye C0O40 adresindeki sayıyı yükle. Ne işe yarar bu? Bakalım. Örneğin bellekte belli bir noktadan başlaya- rak bir dizi sayıdan oluşan bir tablo- muz var. Programın, bu sayıları teker teker okuyup belli bir işleme sokma- sını istiyoruz. Her bir sayı için LDA ad- res 1, LDA adres 2.... yazmaktansa, şu- nu yaparız: Önce X'İ sıfırlarız. Progra- ma LDA adres 4,X deriz. Adres J4 0'da bulunan sayı işlendikten sonra, 1 arftı- rıp programı bir döngüye sokarız. LDA adres 1,X komutu bu sefer Adres 14 1'- deki sayıyı okur. İşlem yapılır, X tekrar bir artıp 2 olur. Döngü başa döner, bu kez Adres4 2'deki sayı okunur; ve böy- lece devam eder. Olayın, BASIC'teki FOR... NEXT dön- güleriyle benzerliğini hemen gördü- nüz İnşallah. LDX3ES00 — -) FORX-0TOLİMİT LDA $ADRES.X -) AszPEEK(ADRES 4 X) İŞLEM —> İŞLEM X'İBİR ARTIR. —) X<X41 BAŞADÖN — -) NEXT ADRESLEME ÇEŞİDİ 4: Zero page ad- resleme. Belleğin 0000 ile OOFF arasındaki ilk 256 adresi “Sıfırıncı Sayfa” diye bilinir. Sıfır sayfadaki adresleri normal iki- byte formatla belirtmek yerine, sade- ce bir byte olarak göstermek, prog- ramlamada önemli kolaylıklar sağlar. Kolaylıkların ne olduğunu peyderpey göreceğiz, aceleye gerek yok. Zero page adresleme, tıpkı mutlak adres- leme gibi olup, tek farklı sadece O—FF arasındaki bellek mahallesiyle ilgili ol- ması ve iki yerine bir byte parametre olmasıdır. AS — LDA mutlak zero page AS5 45 — LDA $45 -0045 adresindeki malı merkebe yükle. Ay- nı komutu, tabii, AD 45 00 diye vermek e mümkün. ADRESLEME ÇEŞİTLERİ 5 VE 6: Zero page X ve Y indeksli. Tıpkı normal X ve Y indeksli gibi, sadece zero page adresler için ve tek byte parametreli, Ö — R - numaralı haneden y ötedeki hanenin yükünü X'e devret 45