Amiga Dünyası sayı 2, sayfa 24

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 24

68000 KOMUTLARI

Motorola 68000 komutlarının hepsi hafızada ikişer byte yer kaplarlar. Buna ek olarak, çoğunlukla iki byte'tan tutun sekiz byte'a kadar komutların parametreleri olabilir. 68000'in komutları bir hafıza adresindeki sayıyı başka bir hafıza adresine taşımak, bir sayıyı bir register'e yüklemek, büyük hafıza bölgelerini başka yerlere taşımak gibi işlemleri yaparlar. Bunlara ek olarak BYTE'ların tüm bitlerini teker teker kullanmak ve basit aritmetik, lojik işlemler yapmak için de özel komutlar bulunur.

Makina dili komutları ile BASIC komutlarını karşılaştırdığımızda ise şöyle bir fark göze çarpıyor. Basic genellikle PRINT, LINE, DRAW gibi ekrana bir şeyler yazmak veya çizdirmek için komutlar içeriyor. Fakat Makina dilinde böyle belli bir işe göre programlanmış komutlar bulunmamaktadır. Bunlar yerine, daha doğrusu bir kısmının yerine, LIBRARY adını verdiğimiz Amiga sistem altrutinlerini kullanıyoruz. Makina dili programımızda kullanmak istediğimiz ve AMIGA LIBRARY (kütüphane)'sinde bulunmayan komutları biz kendimiz yazmak zorunda kalıyoruz. Tabii makina dilindeki bu komutlar BASIC'dekiler ile karşılaştırdığımızda çok büyük hız farkları ortaya çıkıyor, örneğin Basic'de yaptığınız program bir çizgi çizene kadar, makina dilindeki aynı program yüzlercesini rahatlıkla çizebilir. Bunun nedeni, BASIC'deki komutların işlevleri bir programa yönelik olmayıp, genel olarak bütün kullanımlara ayak uydurabilmesidir. Fakat makina dilinde biz, yazdığımız rutinleri sadece o program için yazacağız. Ve bilgisayar bunları hiçbir yorumlayıcıdan geçirmeyeceği için süratle çalışacaktır.

ÖMER SİNAN POLAT

Makina dilindeki programlarımızda tabii ki 68000 haricindeki diğer ciplerin (grafik ve müzik için) kontrol register'lerine de erişeceğiz. Amiga'nın ROM (Read Only Memory - Sadece okuyabileceğimiz hafıza adresleri)'unda grafik işlemlerine yön veren FAT AGNUS cipinin register'lerine erişip istediğimiz grafikleri ekrana getireceğiz, çizgiler çizip, daireler, kareler yapıp, onların renklerini değiştireceğiz. Aynı şekilde Amiga'nın seslerini yaratan PAULA cipi register'lerine erişerek AMIGA'da mevcut 4 ses kanalını kontrol edeceğiz. İlk başta bu anlattıklarımız sizin için dağlar kadar yüksek gözükse de, bunların altında mükemmel bir basitlik yatmaktadır. Ve tam bir mantık. Makina dili programcısı mükemmel bir mantık anlayışı ve sabır sahibi olmalıdır. Tabii bu mükemmel ciplere söz geçirmek için ilk önce 68000 Makina Dili komutlarını öğrenmemiz gerekiyor.

68000'in komutlarını öğrenirken, her komutun genel olarak ne işe yaradığını anlatıp, ardından o komutun parametrelerini teker teker göreceğiz. Ve komutların parametrelerinin kullanımlarını daha da iyi anlamamız için hepsine uygulamalı birer örnek vereceğiz. Tabii zamanla, komutlarını öğrendikçe örnekler gelişip kısa rutinler ve daha da ilerledikçe kısa programlar haline dönüşeceklerdir.

Komutları öğrenirken, işlevlerini ilk okumada anlamayabilirsiniz. Böyle durumlarda verilen örnekleri ve yazıyı bir defa daha, yine olmazsa bir kez daha, yani anlayıncaya kadar okumanızı tavsiye ederim. Çünkü anlayamadığınız bir kısmı geçerseniz, daha sonraki örnek ve uygulamalarda birçok olayı kavrayamayabilirsiniz.

Şimdi komutların açıklamalarına geçelim, ilk olarak;

AMIGA ASSEMBLER

MOVE KOMUTU

Makina dilinde en çok kullanacağımız komutlardan birisidir. Görevini birkaç madde ile sıralayabiliriz.

A- Bir hafıza adresindeki sayıyı bir registere yüklemek

B- Bir hafıza adresindeki sayıyı başka bir hafıza adresine yüklemek

C- Bir registerdeki sayıyı bir hafıza adresine göndermek

D- Bir registerdeki sayıyı başka bir registere yüklemek

E- Bir adres registerindeki sayıyı Stack register, Program Counter'e göndermek

MOVE komutu yapı bakımından 6502 işlemcideki LDA ve STA komutlarına benzemektedir. Tabii MOVE kendi başına bu iki komutun yaptığı işi tek başına ve 4 katı büyüklükte yapabilmektedir.

Şimdi MOVE komutunun en çok kullanım moduna bir örnek verelim, örneğin 240 sayısını 327680 nolu hafıza adresine atamak istiyoruz. Bu işlem, BASIC'te POKE 240, 327680 ile yapılabilir. Aynı işlemi makina dilinde MOVE.B #$F0, $50000 ile yapabiliriz. Burada $F0 onaltılık sistemdedir ve onluk sayı sistemindeki 240 sayısını temsil ediyor. Aynı şekilde 327680 sayısı da, onaltılık sistemde $50000'e karşılık geliyor ve sayının konacak hafıza adresini gösteriyor. $F0'ın başındaki # işareti ise virgülden önceki sayının atanacak salt sayı olduğunu belirler. Eğer bu işareti koymasaydık (MOVE.B $F0, $50000 gibi) komutun parametresi tamamen değişecekti ve $F0 sayısı sayı olmaktan çıkıp bir hafıza adresini temsil edecekti ve bilgisayar da verdiğimiz komuta uyarak $F0 hafıza adresindeki sayıyı alıp $50000 hafıza adresine gönderecekti.

Örnekte MOVE komutunun hemen arkasındaki .B ibaresi ise, komutun BYTE modunda kullanılacağını belirler. Bundan başka .W ve .L olarak da kullanım modları mevcuttur. Bunların yardımı ile iki byte (WORD veya .W) ve dört byte (LONGWORD veya .L)'a aynı anda MOVE komutu ile kumanda edebiliriz, örneğin az önceki kullanımı MOVE.W $F0, $50000 olarak değiştirdiğimizde komut iki byte kullanımına geçiyor. Yani $F0'ı WORD olarak (iki byte = $00F0) olarak $00'ı $50000'e ve $F0'ı $50001'e göndermiş oluyoruz. Bu WORD kullanımını MOVE.W #$00F0, $50000 olarak yazarak daha açıklayıcı ifade etmiş oluruz, önemsiz gibi görünen bu iki sıfırın ileride programlamada çok büyük göz yanılmalarına neden olduğunu söyleyebilirim.

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