1 Nisan 1986 Tarihli Commodore Gazetesi Sayfa 45

1 Nisan 1986 tarihli Commodore Gazetesi Sayfa 45
Metin içeriği (otomatik olarak oluşturulmuştur)

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

Bu sayıdan diğer sayfalar: