MAKİNA DİLİ ÖĞRENİYORUZ!
Yukarıdaki başlık, yeni bir paket programın adı. Ve teybiniz, Commodore 64'ünüz ve hevesiniz varsa, size makina dili öğretebilmek için hazırlandı. Program, 4 bölümden oluşuyor. Taşıması kolay olsun diye 2'şer bölümlük iki kaset hazırlandı. Yani; Bölüm 1 ve Bölüm 2'yi birinci kasette, Bölüm 3 ve 4'ü ise ikinci kasette bulabilirsiniz. Bu kasetlerde toplam 23 ders, 25 alıştırma ve 1 tane de “öğüt” var. Bir de, çok ayrıntılı, az resimli bir kitapçık hazırladık. Bu kitapçık size derslerdeki konular hakkında daha fazla bilgi verecek. Yalnız tavsiyemiz, önce kitapçıktan o ders ile ilgili olan konuyu bir kere okumanız, sonra da dersinizi çalışıp, ilgili alıştırmayı dikkatle incelemeniz. Bunlardan sonra da kendiniz, o konu ile ilgili bir program yazın ve işletin. Hata yapsanız da, doğruyu bulup o konuyu iyice kavrayana kadar, “MAKİNA DİLİ ÖĞRENİYORUZ” sizin peşinizi bırakmayacak.
Derslerimizde
Neler Var?
Birinci bölümde: Registerler, Bellek Yerleşimleri, LOAD ve STORE Komutları, Flag nedir? Toplama ve Çıkartma nasıl yapılır? İkinci bölümde: Transferler, Binary Sayı Sistemi, SHIFT ve ROTATE Komutları, Flaglar, Mantıksal Komutlar ve İndeksli Adresleme. Üçüncü Bölümde: Branch ve Jump'lar, Compare Komutları, Subroutine'ler, Hexadecimal Sayı Sistemi ve Binary Coded Decimal.
MAKINA DILI |
RETURN'e basarak seçiminizi yaptıysanız SPACE
Hr â
1 gösterim irMa irMma öded Decimal
D 18 <c> 1986
nı
Sti
Ha
st
"e
be bei beli A » Tekkeleri
LOGICAL SHIFT RIGHT
ROR ile aynı, tek 8 bitlik sağa doğru bir kayma var. Kayma sonucu solda boş kalan yere 0 giriyor ve açıkta kalan bit, Carry'ye alıyor. ile sayı 2 olur. de alır Değer bir ise) işte örnek:
1 0 6
8 0 i 1 ii 8 86 1 8
CARRY Xx
DEVAM İÇİN SPACE'E BASINIZ 9803
3002
3002
3D02
Şekil-2
|
Load accumulator
with number
ACU TOR RI Y-RE TERİ
RY İZ E
Şekil-3
Dördüncü bölümde: Stack, Adresleme Modları, BIT Komutu ve Interruptlar.
Nasıl Öğreniyoruz?
Programı yüklediğinizde, önünüze Şekil 1'deki gibi bir MENÜ geliyor. (RETURN) tuşuna basarak uzun ve parlak çubuğu çalışmak istediğiniz dersin üzerine getiriyorsunuz ve SPACE'e basıyorsunuz. Ekranda o konu ile ilgili bilgiler görüntüleniyor. Kitapçıkla birlikte çalışmanız için hâlâ uyarıyoruz sizi!
Peki Alıştırmaları
Nasıl Yapacağız?
Uzun ve parlak çubuğu, istediğiniz alıştırmanın üzerine getirip SPACE'e bastığınızda önünüze, o dersle ilgili program Şekil 2'de olduğu gibi geliyor.
Gördüğünüz gibi uzun ve parlak çubuk, şimdi de alıştırma bölümünde verilen programın ilk satırının üzerinde. (RETURN)'e basarak programı satır satır işletiyorsunuz. Şekil 3'te verilen register ve flag'lardaki değişmelere dikkat edin. Eğer hexadecimal karşılıklarını görmek isterseniz, 'F3' tuşuna basarak başka ekrana ge-
ÇİN.
Kendiniz Nasıl
Program Yazarsınız?
Alıştırmanın içindeyken & tuşuna basın. O ana kadar öğrendiğiniz konuyla ilgili, istediğiniz komutları girin ve programınızı çalıştırın. Eğer hata varsa, zaten düzeltmeniz için gerekli uyarıyı alacaksınız. Programınız, siz hatayı düzeltinceye kadar işlemeyip sizi bekleyecek. Bölümleri bitirdikçe, kasetten yeni bölüm yükleyin ve öğreniminize devam edin.
Danışma
Bu programı TELETEKNİK'ten Bilge AYAN ve Mahmure ÜNYELİ hazırladı. Anlamadığınız bir şey olduğunda ya da bir sorunla karşılaştığınızda, 133 014 96 - 147 01 70 - 147 06 91 no'lu telefonlardan aramanızı bekliyorlar!
Basic Bilenler İçin
MAKİNA DİLİ-2
Geçen sayıda, makina dilinin, her biri birer sayıyla ifade edilen birtakım komut kodlarıyla, bunları izleyen bir veya iki byte'lık değerlerden (parametrelerden) oluştuğunu anlatıp, içinde 7 farklı komut bulunan bir programcık verdik. Sıra geldi 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: BASIC'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 REGISTER mevcuttur. Atalarımız bu kavramı Osmanlıca'ya merkep (yük taşıyıcı) diye çevirmişler; ben de öyle yapacağım. Baş merkebin adı akümülatör olup, A diye kısaltılır. Yardımcıları X ve Y'dir. Üçünün huyu, yapabilecekleri işler biraz farklıdır. - Hal böyle olunca, makina dilinin temel birkaç komutu da ortaya çıkmış oluyor: LDA - Load A: Baş merkebi yükle. LDA'yı izleyen bir veya iki değer, yüklenecek malın ne olduğunu gösterir. LDY ve LDX: Yardımcılarını yükle. Yukarıdaki gibi. STA - Store A: Baş merkebin yükünü boşalt. Bu komutu daima, akümülatördeki değerin nereye konulacağını gösteren bir bellek adresi izler. STY ve STX: Y ve X'in değerini boşalt. STA gibi. Merkeplere yüklenecek malın cinsi, 0 ile 255 arası bir sayıdır. Sayının hangi sayı olduğunu söylemenin ise birkaç yolu vardır: 1) Sayıyı, olduğu gibi belirtmek. Buna dolaysız (immediate) yöntem adı verilir. 2) Merkeplerden birine, belli bir bellek adresinde ne sayı varsa onu yüklenmesini söylemek. Buna adresleme deniyor. Adreslemenin 8 çeşidi var. Altısını bu sayıda göreceğiz. LDA, LDY ve LDX komutlarının, demek ki, ilke olarak toplam 9'ar çeşidi mümkün. STA, STY ve STX'te ise dolaysız yöntem söz konusu 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 koduyla belirtiliyor. Yani dolaysız LDA ile, mutlak adresli LDA, X-indeksli adresli LDA, dolaylı adresli LDA, vb. farklı kodlara sahip. Bu kodlara göre, komutu izleyen parametrenin sayı mı, adres mi, neyin nesi olduğunu makina anlayabiliyor. A9 rakamı (desimal olarak ne ediyor?) dolaysız LDA demek. Haliyle, sadece 1 byte parametre alıyor.
A9 00—-LDA $00— Akkümülatöre O
yükle
A0 Dolaysız LDY demek. 1 byte pa-
rametre alıyor.
A0 25—LDY # $25-Y'ye 25 yükle.
A2 Dolaysız LDX demek.
A2 FF-LDX $SFF-X'İ FFle.
Assembly 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
ADRESLEME YÖNTEMLERİ
Adresleme çeşitlerine geçmeden önce, evvela; MADDE 3: 6510 mikroişlemcisinin tüm adresleri iki byte'lık rakamlarla numaralanmıştır. En küçük adres 0000, en büyük adres FFFF (yani 65535)'tir. Makina dilinde, bu adresler daima ters sırayla, yani önce küçük byte, sonra büyük byte olarak yazılır.
Hex 1234 (yani 4660) numaralı adres, makina dilinde 34 12 diye yazılır. Hex CO00 (49152) adresi, 00 CO olarak belirtilir. ADRESLEME ÇEŞİDİ 1: En basiti, mutlak adresleme. Komutu, alçak-yüksek iki byte halinde yazılmış bir adres izler. AD, mutlak adresli LDA komutunun kodudur; iki byte parametre alır.
AD 00 CO—LDA $C000- CO00 adresinde hangi sayı varsa o sayıyı akkümülatöre yükle, 80, mutlak adresli STA komutu kodudur. 80 01 CO-STA $CO0O1 — Akkümülatörde ne varsa C00 adresine koy.
ADRESLEME ÇEŞİTLERİ 2 VE 3: X ve Y indeksli Komutu izleyen iki byte'lik adresten X veya Y kadar ötesinde adrese baktırır.
80, X indeksli LDA komutunun sayısal kodudur. Anlamı şudur: X'te o anda hangi sayı varsa, LDA komutunu izleyen adresten o kadar sonraki adresteki sayıyı akkümülatöre yükle! Örnek:
A2 10 :LDX #510
BD 00CO LDA $C000,X-— Aküye
C040 adresindeki sayıyı yükle.
Ne işe yarar bu? Bakalım. Örneğin bellekte belli bir noktadan başlayarak bir dizi sayıdan oluşan bir tablomuz var. Programın, bu sayıları teker teker okuyup belli bir işleme sokmasını istiyoruz. Her bir sayı için LDA adres 1, LDA adres 2.... yazmaktansa, şunu yaparız: Önce sıfırlarız. Programa LDA adres 1,X deriz. Adres 0'da bulunan sayı işlendikten sonra, 1 arftırip programı bir döngüye sokarız. LDA adres 1,X komutu bu sefer Adres 414 41'- deki sayıyı okur. İşlem yapılır, X tekrar bir artıp 2 olur. Döngü başa döner, bu kez 2'deki sayı okunur; ve bÖylece devam eder. Olayın, BASIC'teki FOR... NEXT döngüleriyle benzerliğini hemen gördünüz inşallah.
—> FOR X-OTOLİMİT
LDA $ADRES.X —-) 4 X)
İŞLEM —> İŞLEM
ARTIR —»
BAŞADÖN — NEXT
ADRESLEME ÇEŞİDİ 4: Zero page adresleme. Belleğin 0000 ile OOFF arasındaki ilk 256 adresi “Sıfırıncı Sayfa” diye bilinir.
Sıfır sayfadaki adresleri normal ikibyte formatla belirtmek yerine, sadece bir byte olarak göstermek, programlamada önemli kolaylıklar sağlar. Kolaylıkların ne olduğunu peyderpey göreceğiz, aceleye gerek yok. Zero page adresleme, tıpkı mutlak adresleme gibi olup, tek farklı sadece arasındaki bellek mahallesiyle ilgili olması ve iki yerine bir byte parametre olmasıdır.
AS — LDA mutlak zero page AS 45 — LDA $45 adresindeki malı merkebe yükle. Aynı komutu, tabii, AD 45 00 diye vermek de 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. B6 60 —LDX $60,y -60 numaralı haneden y ötedeki hanenin yükünü X'e devret.
45
Bir tablo vermenin vakti geldi de Bir de küçük yarışma: A0 A0 kogeçiyor bile: du ile A4 A0 kodunun ne anlama geldiğini ve farkını, dakika geçirmeden bana yazın (ismim yazının vabın sahibine eşantiyon bir oyun Dolaysız : kaseti göndermeye söz veriyo- Mutlak rum. Daha sonraki yarışmalarda Mutlak,X da otomobil ve apartman katı
Mutlak,Y hediye edeceğim.
Zero Page Zero Page,X Zero Page,Y
Birinci sayıdaki yarışmanın ödülü Geçen sayıdaki soruların çözümleri 2) “Merhaba” diyen makina dili “olan monitör kasedini, elimize geçen 1): desimal karşı- programı belleğe POKE eden BASIC ilk doğru çözümün sahibi Halük Gün- 1.97699809E 4 40 program şöyledir:
çer kazandı. Dergiyi alır almaz soruların “üstesinden gelen” Günçer, PTT'- nin nimetlerinden Acele Posta Servisi'-
Ni devreye sokmuş. Böylece Ankaralı | | 10 FOR TO 2B:READ A:POKE 431524x okuyucumuz, bizim İstanbullular'dan 20 SYS 43152 daha atik davranarak, bileğinin ve | 30 DATA 160,0,185,14,192,32,210,255,200,192,7,208 beyninin hakkıyla, monitör kasedini | teybine Taktı. bil, BEİ 40 DATA 245,96,77,69,82,72,65 r66,65
İlk sayının program-döküm ekinde yayınlanan “Commodore-64'te Yazı Karakteri Tanımlama” başlıklı yazımda Commodore'unuza Arapça veya Çince yazdırabileceğinizi söylemiştim. Bazı okurlarımız ekranda Arapça karakterlerin nasıl görüneceğini merak etmişler. İşte böyle...
SOLDAN SAĞA
1. Ekmek ya da pastasız pandispanya. 2. SANİYE'nin yarısında oluveren (öbür yarısında ne olur, diye sorarsanız, yanıtım olur bir YES). 3. Kırk dokuzdur, vilayettir. Ama ille de “Muş” değildir. - At o balığı. babalık! 4. “ON MART'A”, en uzun koşu yapılacak. 5. Sağdan sola doğru okursan 45, soldan sağa doğru okursan 55. - RAD-YO'daki ismi yaz - OYA değil ROY (Rogers) değil, (Doris) DAY
6. “ÂL”nın simetrik yazımlısı büyük harf. 7. “NAMAZ” içeren “MANZARA”, oruç tutulan ayı gösteriyor.
YUKARIDAN AŞAĞIYA
1. Önadlar, soyadları ya da 'e takılanlar. 2. “LOVE” İngilizcede “sevgi”dir, insanlara hayat verir; ama okunuşu Türkçede insanlara ölüm saçar. 3. İçine “PARA” düşmüş; parayı al, bana ver, ötesi senin ol-
NO